Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >前后端分离项目后端向前端返回压缩包的方法实现java版

前后端分离项目后端向前端返回压缩包的方法实现java版

作者头像
gzq大数据
发布于 2021-09-28 08:34:50
发布于 2021-09-28 08:34:50
1.2K00
代码可运行
举报
文章被收录于专栏:大数据那些事大数据那些事
运行总次数:0
代码可运行

最近公司的项目是让前端有让用户下载zip压缩包(里面都是图片,图片是保存在ftp上的)的任务,经过调研,将最终方案复制在下面:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  //zip文件的下载
    @GetMapping("/zip/{imagePath}")
    @ResponseBody
    public void zip(HttpServletResponse response, @PathVariable(value = "imagePath", required = false) String imagePathList) throws IOException {
        String[] imagePaths = imagePathList.split(CCPCommon.CCP_SEPARATOR);
        //设置返回响应头
        response.reset();
        // 自动判断下载文件类型
        response.setContentType("multipart/form-data");
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("picture.zip", "UTF-8"));

        FTPClient ftpClient;
        ftpClient = FtpUtil.getFTPClient("xxx", "xxx", "xxx", 21);
        // 中文支持
        ftpClient.setControlEncoding("UTF-8");
        ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
        ftpClient.enterLocalPassiveMode();
        ftpClient.changeWorkingDirectory("ftp://xxx");
        ZipOutputStream zos = null;
        OutputStream os = response.getOutputStream();
        try {
            zos = new ZipOutputStream(os);
            InputStream ins = null;
            for (String imagePath : imagePaths) {
                if (imagePath == null || imagePath.equals("") || imagePath.equals("undefined")) {//如果书没有上传
                    continue;
                }
                ins = ftpClient.retrieveFileStream(new String(imagePath.getBytes("UTF-8"), "iso-8859-1"));
                if (ins != null) {
                    zos.putNextEntry(new ZipEntry(imagePath));
                    int len;
                    byte[] buff = new byte[1024];
                    while (-1 != (len = ins.read(buff, 0, buff.length))) {
                        zos.write(buff, 0, len);
                    }
                    zos.closeEntry();
                    ins.close();
                    ftpClient.completePendingCommand();//不让一个循环后ftpClient自动关闭
                }
            }
            zos.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (zos != null) {
                try {
                    zos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

这里很重要的操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  //设置返回响应头
        response.reset();
        // 自动判断下载文件类型
        response.setContentType("multipart/form-data");
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("picture.zip", "UTF-8"));

一定要设置响应头部的type,并且可以给这个压缩包起一个名字。 还有就是ftp的一个细节:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 ftpClient.completePendingCommand();

如果不加这一行,ftp自动会关闭连接,一定要让它保持连接状态。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/09/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java批量下载
查询出需要下载附件的集合,下载附件到临时目录,压缩下载到临时文件夹的附件,生成压缩包,最后下载压缩包
学以致用丶
2022/06/28
6570
java 下载文件
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/154241.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/07
4850
Java FTP下载文件以及编码问题小结
之前在开发过程中,遇到了一点问题,我要访问一个FTP服务器去下载文件详细情况如下:
Rekent
2018/09/04
1.2K0
浏览器下载压缩包
#需求如下 通过前台传入id数据库查询数据,写入临时文件,再将临时文件存入,压缩包,一起打包下载。 #代码如下
崔笑颜
2020/06/08
1.5K0
【File操作】Java实现导出ZIP压缩包
最近接触到一个需求要求压缩导出文件,于是乎便要致力于研究一下工具类啦,故也诞生了此篇文章。 下面代码中,溪源也将import导入的依赖也贴出来了,避免大家引入错误。
沁溪源
2020/11/04
3.9K1
springboot 文件的上传下载
SpringMVC的文件上传是通过MultipartResolver(Multipart解析器)处理,MultipartResolver只是一个接口,有两个实现类。 1.CommonsMultipartResolver :依赖Apache FileUpload项目解析Multipart,可以在Spring的各个版本使用,需要依赖第三方jar包。 2.StandardServletMultipartResolver: 是Spring3.1之后的产物,依赖于Servlet3.0或更高版本的实现,不需要第三方jar包。
smallmayi
2022/05/12
7340
springboot 文件的上传下载
Web阶段:第十五章:文件上传&下载
文件的上传 1、首先需要一个form表单 2、然后在表单内有input type=”file” 3、提交的方式必须是method=”POST” 4、enctype="multipart/form-data"编码类型必须是多段的表单数据
Java廖志伟
2022/09/28
3610
Web阶段:第十五章:文件上传&下载
SpringMVC:commons文件上传和下载
一旦设置了enctype为multipart/form-data,浏览器即会采用二进制流的方式来处理表单数据,而对于文件上传的处理则涉及在服务器端解析原始的HTTP响应。在2003年,Apache Software Foundation发布了开源的Commons FileUpload组件,其很快成为Servlet/JSP程序员上传文件的最佳选择。
冷环渊
2021/10/19
6860
【java下载】
1、提供在controller层,大家可以根据项目需要,抽取到service层。
用户5640963
2019/07/25
5.7K0
【工具类】多文件压缩下载ZipUtil
ZipUtil import java.io.*; import java.net.URLEncoder; import javax.servlet.http.HttpServletResponse; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipOutputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; //import java
周杰伦本人
2022/10/25
5460
Java生成多级ZIP压缩文件
比如,返回一个数据给移动端,但需要对数据进行压缩。大压缩包里面包含N多个小压缩包。类似于:
大风写全栈
2024/10/30
1600
Java生成多级ZIP压缩文件
【springboot2.x】实现文件下载
简写了几种下载日志的方法。一、方法一 @ApiOperation("日志下载") @GetMapping("/logDownload") public void download(HttpServletResponse response) { try { String mulu = "d:/logs"; ZipUtil.zip(mulu); String path = "d:/logs.zip";
无敌小菜鸟
2023/02/16
8940
前端下载远程文件从后端获取文件名
前端基于远程二级制流下载文件的时候需要注意的前端需要在axios拦截器里面设置responseTypelei'x
李维亮
2023/03/11
2.2K0
项目知识盲区五
Java IO操作——掌握压缩流的使用(ZipOutputStream、ZipFile、ZipInputStream)[java.util包中]
大忽悠爱学习
2021/12/27
4420
项目知识盲区五
java实现多个网络文件批量下载并压缩
文档管理模块,列表中显示的记录的每日文件上传保存的记录.每条数据中有一个字段存放了文件的存储地址文件服务器上
java攻城狮
2020/10/10
5.9K0
Java 下载zip文件
List attachFileList = bookService.findAttachFileList(ids);
凯哥Java
2019/06/30
7.6K2
项目A使用httpclient调用项目B中的POI导出excel
最近在做这样的一个需求: 我们有几套相似的后台,其中的表结构还不是完全一致,但是后台的菜单功能基本相同,我们想把这几个后台合并到一个后台中,通过下拉菜单进行后台的切换。以下简称总后台和子后台。
一缕82年的清风
2021/12/06
5660
程序员最基本的素养是什么?关闭流!
参考博客: https://blog.csdn.net/keep12moving/article/details/89386058
周杰伦本人
2022/10/25
2150
java下载文件或文件夹
最近接到一个需求,就是将远程目录下的文件或文件夹下载到指定目录下,下面来看下最后的成果。
全栈程序员站长
2022/09/08
1.6K0
Java实现根据excel模板
这是我业务层areaMapper.queryProvinceArea();所返回的省份数据
花落花相惜
2021/11/22
1.5K0
相关推荐
Java批量下载
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验