SpringMVC下压缩文件下载
最近在做文件下载的功能,由于下载的是图片,内容比较大,所以需要先在服务器端进行压缩,压缩后下载到用户本地。
文件下载的步骤:
1)在服务器端建立一个临时压缩文件
2)找到文件路径,用JDK自带的API进行文件压缩
3)将zip文件下载,文件流输出
4)删除服务器端临时文件
文件下载:
@Controller
@RequestMapping(value = "${/multidownload")
public class MultiResouceDownload extends BaseController{@RequestMapping(value = "/downloadZip")public String downloadFiles(List<File> files,HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException { String fileName = UUID.randomUUID().toString() + ".zip";// 在服务器端创建打包下载的临时文件String outFilePath = request.getSession().getServletContext().getRealPath("/");File fileZip = new File(outFilePath + fileName);// 文件输出流FileOutputStream outStream = new FileOutputStream(fileZip);// 压缩流ZipOutputStream zipOutStream = new ZipOutputStream(outStream);zipFile(files, zipOutStream);zipOutStream.close();outStream.close();this.downloadFile(fileZip, response, true);return null;}
循环遍历多个文件方法:
//循环压缩多个文件public static void zipFile(List<File> files, ZipOutputStream outputStream) throws IOException, ServletException {try {int size = files.size();// 压缩列表中的文件for (int i = 0; i < size; i++) {File file = (File) files.get(i);zipFile(file, outputStream);}} catch (IOException e) {throw e;}}
文件压缩方法:
public static void zipFile(File inputFile, ZipOutputStream outputstream) throws IOException, ServletException {try {if (inputFile.exists()) {if (inputFile.isFile()) {FileInputStream inStream = new FileInputStream(inputFile);BufferedInputStream bInStream = new BufferedInputStream(inStream);ZipEntry entry = new ZipEntry(inputFile.getName());outputstream.putNextEntry(entry);final int MAX_BYTE = 10 * 1024 * 1024; // 最大的流为10Mlong streamTotal = 0; // 接受流的容量int streamNum = 0; // 流需要分开的数量int leaveByte = 0; // 文件剩下的字符数byte[] inOutbyte; // byte数组接受文件的数据streamTotal = bInStream.available(); // 通过available方法取得流的最大字符数streamNum = (int) Math.floor(streamTotal / MAX_BYTE); // 取得流文件需要分开的数量leaveByte = (int) streamTotal % MAX_BYTE; // 分开文件之后,剩余的数量if (streamNum > 0) {for (int j = 0; j < streamNum; ++j) {inOutbyte = new byte[MAX_BYTE];// 读入流,保存在byte数组bInStream.read(inOutbyte, 0, MAX_BYTE);outputstream.write(inOutbyte, 0, MAX_BYTE); // 写出流}}// 写出剩下的流数据inOutbyte = new byte[leaveByte];bInStream.read(inOutbyte, 0, leaveByte);outputstream.write(inOutbyte);outputstream.closeEntry(); // Closes the current ZIP entrybInStream.close(); // 关闭inStream.close();}} else {throw new ServletException("文件不存在!");}} catch (IOException e) {throw e;}}
总结:
上述方法就能实现文件的压缩下载,但仔细分析发现还是少一些东西,进行压缩前没有进行校验,不能验证数据的正确性,还需要进行修改,目前正在探索中。。。。
SpringMVC下压缩文件下载相关推荐
- 关于springmvc下服务器文件打包成zip格式下载功能
关于springmvc下服务器文件打包成zip格式下载功能 2016年09月21日 11:22:14 toxic_guantou 阅读数:5731更多 个人分类: 技术点存储 版权声明:本文为博主原创 ...
- 高压缩比 压缩软件 linux,Linux下压缩软件对比
Linux下压缩软件对比 发布时间:2007-02-15 00:44:03来源:红联作者:seais 最近在做系统备传输时发现压缩时间过常,于是简单做了一下Linux下的压缩软件的测试 源文件3591 ...
- linux 音频文件长度,Linux下压缩音频文件
安装工具 sudo apt-get install lame 具体用法可以查看帮助 lame --help 通过更改音频文件的帧数 可以让文件变小 但是音质也会随之下降 现在比较多的mp3文件是1 ...
- 基于SpringMVC下的Rest服务框架搭建【1、集成Swagger】
基于SpringMVC下的Rest服务框架搭建[1.集成Swagger] 1.需求背景 SpringMVC本身就可以开发出基于rest风格的服务,通过简单的配置,即可快速开发出一个可供客户端调用的re ...
- java实现excel文件上传_java相关:SpringMVC下实现Excel文件上传下载
java相关:SpringMVC下实现Excel文件上传下载 发布于 2020-6-21| 复制链接 摘记: 在实际应用中,经常会遇到上传Excel或者下载Excel的情况,比如导入数据.下载统计数据 ...
- python 下载文件-Python实现HTTP协议下的文件下载方法总结
本文介绍了几种常用的python下载文件的方法,具体使用到了htttplib2,urllib等包,希望对大家有帮忙. 1.简单文件下载 使用htttplib2,具体代码如下: h = httplib2 ...
- php压缩文件下载后损坏,php下载压缩文件
压缩文件是正常的,但是下载到本地就提示损坏,打不开,但是随便创建一个压缩文件下载又是正常的 $froot = dirname($_SERVER['DOCUMENT_ROOT']) . '/upzip/ ...
- linux解压命令rar,Linux下压缩与解压命令详解
本文为大家分享了Linux下压缩与解压缩命令,供大家参考,具体内容如下 [tar命令] 解压:tar -zxvf FileName.tar 压缩:tar -czvf FileName.tar DirN ...
- linux系统下 压缩和解压缩文件命令
linux系统下 压缩和解压缩文件命令 1.把/home目录下面的mydata目录压缩为mydata.zip zip -r mydata.zip mydata #压缩mydata目录 2.把/home ...
- .net下进行文件下载
.net 下进行文件下载有两种模式,下面分类进行讲解 直接通过文件所在地址进行下载 这种方法最简单,直接通过访问文件所在的网址进行下载 1.在当前页面下载 <a href="/port ...
最新文章
- android学习从模仿开始 —— 模仿UI 导航帖
- springboot+vue前后端分离实现宿舍管理系统
- day20-自定义分页2
- Leetcode 剑指 Offer 04. 二维数组中的查找 (每日一题 20210727)
- highcharts如何把图多余的空白页面_如何进行前端性能测试入门篇
- 基于Boost::beast模块的同步WebSocket服务器
- Nginx虚拟目录(转)
- ES6学习(箭头函数详解)
- springboot 项目maven 打包错误
- 关于 Failed to resolve: org.jetbrains.kotlin:kotlin-stdlib-jre7的错误
- matlab 设计 希尔伯特变换器,基于Matlab的FIR型希尔伯特变换器设计
- 修改Android模拟器的IMEI号
- MTCNN人脸检测与人脸对齐
- 如何在FLASH中实现眨眼睛的动画效果
- mqtt 传文件断开连接的原因_MQTT系列 | MQTT的连接和断开
- 解决东方财富数据接口激活后仍显示reactive的问题
- 变分不等式matlab,变分不等式
- 不收费的Word软件推荐
- sever and mirroring(服务器和镜像)是什么
- Python实现逐步回归