springboot上传zip包并解压至服务器nginx目录方式

 更新时间:2025年04月21日 14:38:09   作者:Sir_小三  
这篇文章主要介绍了springboot上传zip包并解压至服务器nginx目录方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

springboot上传zip包并解压至服务器nginx目录

此案例场景为:

从前端上传.zip 包,并进行解压至 docker容器内(服务部署使用了docker),然后容器内部解压目录与 宿主机(linux)nginx 目录的html 进行挂载,这样,就可以通过nginx 来访问上传解压出来的文件了。

那么具体看怎么实现,下面会贴上相关代码:

1.首先需要引入zip相关jar包

 <dependency>
            <groupId>net.lingala.zip4j</groupId>
            <artifactId>zip4j</artifactId>
            <version>1.3.1</version>
        </dependency>

2.然后我直接贴controller 代码了

package com.fnm.feynman.smartvillage.admin.controller;

import com.diboot.core.vo.JsonResult;
import com.fnm.feynman.smartvillage.business.entity.RegionVillage;
import com.fnm.feynman.smartvillage.business.service.RegionVillageService;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;


/**
 * @author yanjun.liu
 * @date 2020/12/24--16:41
 */
@Slf4j
@RestController
@RequestMapping("/admin/open")
public class UploadVrController {

    @Autowired
    private RegionVillageService regionVillageService;

    /**
     *  https://www.cnblogs.com/0616--ataozhijia/p/5022028.html
     * @param id  村庄id
     * @param file  上传的vr
     * @throws IOException
     * 上传到docker容器内 /opt下,并解压,然后宿主机和容器内路径进行挂载,外部挂载地址为nginx服务器html 目录
     */
    @ApiOperation("上传vr")
    @PostMapping("/uploadVr/{id}")
    public JsonResult uploadVr(@PathVariable("id") Long id, MultipartFile file) throws IOException, ZipException {
        RegionVillage entity = regionVillageService.getEntity(id);

        File file1 = new File("/opt/" + entity.getValue()+".zip");
        //上传文件到服务器/opt/目录下
        //File file1 = new File("E:/zip/" + entity.getValue()+".zip");
        FileUtils.writeByteArrayToFile(file1,file.getBytes());

        ZipFile zipFile = new ZipFile(file1);
        //给的vr是gbk,如果这里,你上传的zip包为utf-8,那么这里改为utf-8
        zipFile.setFileNameCharset("gbk");

        String path="/opt/"+entity.getValue();
        //解压到指定目录
        zipFile.extractAll(path);


        String substring = file.getOriginalFilename().substring(0, file.getOriginalFilename().indexOf("."));

   //将解压到nginx 目录的路径地址拼接为可访问的url ,进行修改实体对象
        entity.setVrUrl("https://**ed.*****.com/vr/"+entity.getValue()+"/"+substring+"/output/index.html");
        regionVillageService.updateEntity(entity);
        return JsonResult.OK();
    }
}

3.说明上面上传的/opt/目录为docker容器里面的目录

那么我需要将容器里面的目录和宿主机nginx目录进行挂载后,才能通过http请求访问

具体如何挂载呢?

关键:

-v /usr/local/nginx/html/vr:/opt

前面为宿主机nginx的静态文件目录,:后面为容器内部目录,这个配置智慧解压缩后的文件就会同步到 nginx html目录下,就可以访问了

docker run -d -p 4011:4011 --net mynet --name feynman-smart-village-admin  -v /usr/local/nginx/html/vr:/opt  feynman-smart-village-admin:latest  

至此 上传zip 解压 至服务器就完成了~

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • mybatis自定义参数类型转换器数据库字段加密脱敏

    mybatis自定义参数类型转换器数据库字段加密脱敏

    这篇文章主要为大家介绍了mybatis自定义参数类型转换器数据库字段加密脱敏,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Java实现提取不重复的整数实例

    Java实现提取不重复的整数实例

    这篇文章主要介绍了Java实现提取不重复的整数实例,具有一定借鉴价值,需要的朋友可以参考下
    2017-12-12
  • 详解Java中的OkHttp JSONP爬虫

    详解Java中的OkHttp JSONP爬虫

    一般在java平台上,我们会使用apache httpclient作为http客户端,用于发送 http 请求,并对响应进行处理,这篇文章主要介绍了详解Java中的OkHttp JSONP爬虫的相关资料,需要的朋友可以参考下
    2022-07-07
  • Java超详细介绍抽象类与接口的使用

    Java超详细介绍抽象类与接口的使用

    在类中没有包含足够的信息来描绘一个具体的对象,这样的类称为抽象类,接口是Java中最重要的概念之一,它可以被理解为一种特殊的类,不同的是接口的成员没有执行体,是由全局常量和公共的抽象方法所组成,本文给大家介绍Java抽象类和接口,感兴趣的朋友一起看看吧
    2022-05-05
  • Java开发者必备10大数据工具和框架

    Java开发者必备10大数据工具和框架

    这篇文章主要为大家详细介绍了Java开发者必备10大数据工具和框架,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • SpringBoot中的Actuator详解

    SpringBoot中的Actuator详解

    这篇文章主要介绍了SpringBoot中的Actuator详解,Spring Boot Actuator 在Spring Boot第一个版本发布的时候就有了,它为Spring Boot提供了一系列产品级的特性,监控应用程序,收集元数据,运行情况或者数据库状态等,需要的朋友可以参考下
    2023-09-09
  • Spring Security中防护CSRF功能详解

    Spring Security中防护CSRF功能详解

    这篇文章主要介绍了Spring Security中防护CSRF功能,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • java 使用foreach遍历集合元素的实例

    java 使用foreach遍历集合元素的实例

    这篇文章主要介绍了java 使用foreach遍历集合元素的实例的相关资料,这里提供实例帮助大家理解如何使用foreach 进行遍历,希望能帮助到大家,
    2017-08-08
  • Java 基础语法之解析 Java 的包和继承

    Java 基础语法之解析 Java 的包和继承

    包是组织类的一种方式,继承顾名思义,比如谁继承了长辈的产业,其实这里的继承和我们生活中的继承很类似,下面文字将为大家详细介绍Java的包和继承
    2021-09-09
  • 解决tk mapper 通用mapper的bug问题

    解决tk mapper 通用mapper的bug问题

    这篇文章主要介绍了解决tk mapper 通用mapper的bug问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06

最新评论