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 解压 至服务器就完成了~

总结

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

相关文章

  • java实现数字猜拳小游戏

    java实现数字猜拳小游戏

    这篇文章主要为大家详细介绍了java实现数字猜拳的小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • Java中的枚举enum详细解读

    Java中的枚举enum详细解读

    这篇文章主要介绍了Java中的枚举enum详细解读,当我们使用enum关键字开发一个枚举类时,默认会继承Enum类,而且是一个final类,当有多个枚举对象时,使用逗号 ,隔开,最后一个用分号;结尾,需要的朋友可以参考下
    2024-01-01
  • 一文详解如何在SpringMVC的视图中渲染模型数据

    一文详解如何在SpringMVC的视图中渲染模型数据

    SpringMVC是一个基于Spring框架的Web框架,它提供了一种方便的方式来处理 HTTP 请求和响应,在SpringMVC中,视图是用来渲染模型数据的组件,它们负责将模型数据转换为HTML、JSON、XML等格式的响应,在本文中,我们将讨论如何在SpringMVC中的视图中渲染模型数据
    2023-07-07
  • 使用spring注入枚举类型作为参数

    使用spring注入枚举类型作为参数

    这篇文章主要介绍了使用spring注入枚举类型作为参数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • springboot2.6.3读取不到nacos上的配置文件问题

    springboot2.6.3读取不到nacos上的配置文件问题

    这篇文章主要介绍了springboot2.6.3读取不到nacos上的配置文件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • 轻松掌握java外观模式

    轻松掌握java外观模式

    这篇文章主要帮助大家轻松掌握java外观模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • 详解Java Selenium中的键盘控制操作

    详解Java Selenium中的键盘控制操作

    这篇文章主要为大家介绍了如何使用java代码利用Selenium 控制浏览器中需要用到的键盘操作。文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-01-01
  • 如何利用Spring MVC实现RESTful风格

    如何利用Spring MVC实现RESTful风格

    这篇文章主要介绍了如何利用Spring MVC实现RESTful风格,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • java操作oracle数据库示例

    java操作oracle数据库示例

    这篇文章主要介绍了java操作oracle数据库示例,需要的朋友可以参考下
    2014-04-04
  • mybatisPlus打印sql配置的四种方法

    mybatisPlus打印sql配置的四种方法

    MyBatis-Plus提供了多种方式来配置SQL打印功能,以便进行调试和性能分析,这篇文章主要介绍了mybatisPlus打印sql配置的四种方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-12-12

最新评论