Web服务下载zip文件
- 需求
- 平时下载功能最经常用到,服务中也会有完备的封装。最近新完成的一个项目,需要下载多个文件,自然首先想到的是将多个文件封装成zip文件进行下载。
- 提笔忘字,这种不是经常使用的api,难免会忘记怎么样使用。特此记录。同时也希望能够给路过的同学节省一些时间。
- 解决思路
- 通过需求分析,发现自身需要的操作并不多就决定选用java.utils.zip.*
ps:在开始写之前先吐槽一下网上各种先生成附件再下载的奇葩操作。简直误人子弟。把这些东西放在项目里真的不觉得难受么。 - 废话不多说,直接上代码
try (ZipOutputStream zipOs = new ZipOutputStream(response.getOutputStream())) {for (NameAndValueVo nameAndValueVo : fileTransContent.getNameAndValueVoList()) {File file = new File(uploadPath + File.separator + nameAndValueVo.getValue());if (!file.exists()) {logger.error("[下载]-文件不存在,文件路径:{}", file.getAbsolutePath());continue;}try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) {zipOs.putNextEntry(new ZipEntry(nameAndValueVo.getName()));IOUtils.copy(bis, zipOs);} catch (IOException ioException) {logger.error("读取文件失败,原因:{}", ioException);}}} catch (IOException ioException) {logger.error("输出文件失败,失败原因:{}", ioException);}
- 出现问题
- 当然会出现问题,如果完全没有问题就不需要记录了啊。
- 成功下载文件之后,zip文件无法打开,无论是mac系统还是windos系统都无法解压该文件。提示无法识别这是zip文件。
经过漫长的尝试之后,偶然发现了一个神奇的api
zipOs.closeEntry();
- 原因
- 忘记给每一个文件结束后添加结束标记。因此系统无法识别zip文件结构自然无法解压。完整的代码应该是
try (ZipOutputStream zipOs = new ZipOutputStream(response.getOutputStream())) {for (NameAndValueVo nameAndValueVo : fileTransContent.getNameAndValueVoList()) {File file = new File(uploadPath + File.separator + nameAndValueVo.getValue());if (!file.exists()) {logger.error("[下载]-文件不存在,文件路径:{}", file.getAbsolutePath());continue;}try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) {zipOs.putNextEntry(new ZipEntry(nameAndValueVo.getName()));IOUtils.copy(bis, zipOs);zipOs.closeEntry();} catch (IOException ioException) {logger.error("读取文件失败,原因:{}", ioException);}}} catch (IOException ioException) {logger.error("输出文件失败,失败原因:{}", ioException);}
下载~大功告成
5. 总结
不要盲目相信网上的代码,最关键的是自己要去看api
Web服务下载zip文件相关推荐
- 根据链接下载zip文件并用密码解压
根据链接下载zip文件并用密码解压(亲测可用) 导入所需要的pom(注意版本) 导入所需要的pom(注意版本) 导入所需要的pom(注意版本) <dependency><groupI ...
- php+下载+网路错误,下载zip文件“网络错误失败”(PHP / NGINX)
当我尝试从我的实时服务器下载zip文件时,我的浏览器(Chrome和Firefox)出现以下错误:https://mysite.com:网络错误失败. 令人困惑的是,在我的localhost上使用我的 ...
- java下载zip文件损坏_使用Java下载.zip文件会导致损坏的.zip文件?
我写了这个方法来下载最新的Selenium Chrome驱动程序,它不起作用.它导致损坏的.zip文件.任何人都可以发现我的错误在哪里?使用Java下载.zip文件会导致损坏的.zip文件? priv ...
- Python压缩解压zip,Django下载zip文件
Python压缩解压zip 压缩 import zipfile def convert_zip(zip_path, save_path):'''# zip_path 要压缩文件的路径# save_pa ...
- vue下载zip文件提示损坏
vue下载zip文件提示损坏 问题代码 前端 export function exportCheckFile() {return request({url: '/exportCheckFile',me ...
- python web项目导出zip文件_通过javascript在网页端生成zip压缩包并下载
zip.js是什么 通过zip.js封装一个能在网页端生成zip文件的插件, 直接在网页中创建包含文件夹和文件的压缩包,也可以自定义名字并下载: 如何使用: 1:引用zip.js 2:引用jQuery ...
- java web下载zip文件_Java Web之下载文件
下载的文件,不能随便的被访问,放在外面的文件夹肯定不行,url一敲就能访问了,所以我们要放在WEB-INF文件夹里面,WEB-INF文件夹只有Servlet才能访问,我们新建一个文件夹,叫downlo ...
- 使用Jsch通过SFTP下载ZIP文件并解压
ZIP模块用的并不是java.util下的,而是apache的commons-compress,用apache的库可以避免很多因为操作系统问题造成的编码异常. 大概流程是这样的:本地通过sftp访问服 ...
- 基于Python——实现远程下载sftp文件(只下载.zip文件)
[背景]远程下载发布包等文件时,总是要使用WinSCP等工具登陆拖动.今天就介绍一种使用python下载文件到本地的方法. [代码实现] 1 import paramiko # paramiko模块, ...
最新文章
- WatchStor观察:思科携EMC等合作伙伴 圈地数据中心市场
- 作业九 ——报告及总结
- UITableView-常见设置
- reloaddata 跳动_纸跳动像素
- C语言试题十一之计算并输出下列多项式值:sn=(1-1/2)+(1/3-1/4)+…+(1/(2n-1)1/2n).
- jsp页面判断输入编号已存在mysql中_面试官让我聊聊Mysql基础架构之日志文件与数据文件...
- C 输入 输出——Day03
- 介绍两款代码自动生成器,帮助提升工作效率
- 《疯狂的站长》站长必读书籍
- openmv串口数据 串口助手_实例 | 使用Python串口实时显示数据并绘图
- 如何把C盘下用户的中文用户名改成英文用户名
- 恋爱法则在学英语背单词中的应用
- 段码液晶屏学习应用笔谈
- python2.7常用的标准库
- ArchiCAD与Revit深度对比
- 服务注册与发现:Nacos Discovery
- python中的数据类型和控制流
- Mybatis 实现原理之 一二级缓存
- 直通车的计算机分数线,2017学考录取各校专业分数线汇总,值得参考!
- 二网络专题OSI七层模型、TCP/IP协议栈