JavaWeb通过http下载多个文件,打包下载,压缩下载

DownloadController.java 代码如下
package gov.zhbs.web;import gov.zhbs.utils.MyZipUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;/*** <p>* 下载文件控制器* </p>* <p>* Copyright:.All rights reserved.* </p>* <p>* Company:Zsoft* </p>* <p>* CreateDate: 2022-08-16* </p>** @author YuGongWen* @history Mender: YuGongWen;Date: 2022-08-16;*/
@RequestMapping("/download")
@Controller
public class DownloadController {private Logger logger = LoggerFactory.getLogger(getClass());/*** ‘一键下载’将所有文件打包并下载** @return* @throws Exception*/@RequestMapping(value = "/downloadAttachmentAll", method = RequestMethod.GET)public void downloadAttachmentAll(HttpServletRequest request, HttpServletResponse response) throws Exception {logger.info("开始下载文件");Map<String, byte[]> unpackResult = new HashMap<>();byte[] file_1 = FileUtils.readFileToByteArray(new File("C:\\temp\\test-1.txt"));byte[] file_2 = FileUtils.readFileToByteArray(new File("C:\\temp\\test-2.txt"));unpackResult.put("test-1", file_1);unpackResult.put("test-2", file_2);if (CollectionUtils.isNotEmpty(unpackResult.keySet())) {byte[] fileDatas = MyZipUtil.pack(unpackResult);try {String mimeType = request.getSession().getServletContext().getMimeType(".zip");if (mimeType == null) {mimeType = "application/octet-stream";}response.setContentType(mimeType);String headerKey = "Content-Disposition";String headerValue = String.format("attachment; filename=\"%s\"", URLEncoder.encode("一键下载附件.zip", "utf-8"));response.setHeader(headerKey, headerValue);response.setHeader("Content-Length", String.valueOf(fileDatas.length));response.getOutputStream().write(fileDatas);response.flushBuffer();} catch (Exception e) {e.printStackTrace();}}logger.info("结束下载文件");}}

工具类 MyZipUtil.java 代码如下

package gov.zhbs.utils;import org.apache.commons.compress.archivers.ArchiveException;
import org.apache.commons.compress.archivers.ArchiveOutputStream;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.io.IOUtils;import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Map;/*** <p>* zip压缩解压工具类* </p>* <p>* Copyright:.All rights reserved.* </p>* <p>* Company:Zsoft* </p>* <p>* CreateDate: 2022-08-16* </p>* * @author YuGongWen* @history Mender: YuGongWen;Date: 2022-08-16;*/
public abstract class MyZipUtil {private static final String GBK = "GBK";private MyZipUtil() {}/*** 压缩多个文件* @param datas* @return*/public static byte[] pack(Map<String, byte[]> datas){try {ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();ArchiveOutputStream out = createOutputStream(byteArrayOutputStream);for (String attachment : datas.keySet()) {pack(out, datas.get(attachment), attachment);}out.close();return byteArrayOutputStream.toByteArray();} catch (Exception e) {e.printStackTrace();}return null;}private static void pack(ArchiveOutputStream out, byte[] data, String fileName) {try {// 压缩进zipout.putArchiveEntry(new ZipArchiveEntry(fileName));IOUtils.write(data, out);out.closeArchiveEntry();} catch (IOException e) {e.printStackTrace();}}private static ArchiveOutputStream createOutputStream(OutputStream out) throws ArchiveException {ArchiveStreamFactory factory = new ArchiveStreamFactory();factory.setEntryEncoding(GBK);return factory.createArchiveOutputStream(ArchiveStreamFactory.ZIP, out);}}

JavaWeb通过http下载多个文件,打包下载,压缩下载相关推荐

  1. think.class.php下载,PHP_ThinkPHP实现将本地文件打包成zip下载,首先,将FileToZip.class文件放到T - phpStudy...

    ThinkPHP实现将本地文件打包成zip下载 首先,将FileToZip.class文件放到ThinkPHP/Extend/Library/ORG/Util/文件夹中,FileToZip.class ...

  2. 文件打包为zip下载(filesaver\ StreamSaver)

    文件打包为zip下载(filesaver\StreamSaver) 在react项目中使用的,仅展示核心方法,其他的结构没写,使用时记得自己修改规范之类的 1,使用filesaver.js 需安装ax ...

  3. system.img解包打包工具_好程序员云计算学习路线分享文件打包及压缩

    好程序员云计算学习路线分享文件打包及压缩 好程序员 建议针对目录 Demo: 复制未打包的文件到远程主机 [root@yangs ~]# du -sh /etc 39M /etc [root@yang ...

  4. 如何将文件打包、压缩并分割成制定大小?

    如何将文件打包.压缩并分割成制定大小? (如何在linux下实现Windows中winrar和winzip等压缩软件所提供的打包压缩分割功能) 将大文件或目录打包.压缩并分割成制定大小的文件,这在将数 ...

  5. Linux新手上路(六):文件打包和解压缩

    1.概念讲解 在讲 Linux 上的压缩工具之前,有必要先了解一下常见常用的压缩包文件格式.在 Windows 上最常见的不外乎这两种 .zip,.7z 后缀的压缩文件.而在 Linux 上面常见的格 ...

  6. linux中如何压缩单个文件大小,Linux 将文件打包、压缩并分割成指定大小

    打包文件: tar -cvf .tar 分割文件: split -b 3G -d -a .tar .tar. //使用split命令,-b 3G 表示设置每个分割包的大小,单位还是可以k // -d ...

  7. 压缩base 64字符串_ftp下载多个文件,ftp下载多个文件打包成一个压缩包

    在一些日常的网络批量维护工作中,经常需要使用ftp计划任务,定时上传或下载多个文件.对不太了解ftp命令和windows计划任务的新手来说,确实是一个很棘手的问题.今天我们来看看如何简单的实现这功能. ...

  8. FTP下载多个文件打包成一个压缩包

    @RequestMapping("downloadsByplFromFTP")     @ResponseBody     public  void downloadsByplFr ...

  9. java批量文件打包成压缩成zip下载和大量数据导出excel时的处理方法

    对于我们来说,java导出数据成excel或其他数据文件,或者下载资源是开发中的家常便饭, 但是在导出的时候,如果点击一个按钮导出几百万条数据,如果不作处理的话很可能会出现一系列的问题. 这里介绍打包 ...

  10. FTP文件夹下文件打包成zip下载

    private static String encoding = System.getProperty("file.encoding");private static String ...

最新文章

  1. 高性能javascript 文件加载阻塞
  2. 数据库的实现【笔记】
  3. 如何开发一个异常检测系统:如何评价一个异常检测算法
  4. pcm压缩 java,Java C.PcmEncoding方法代码示例
  5. 机器阅读(一)--整体概述
  6. eclipse安装Android模拟器genymotion及其插件
  7. Linux根文件组织架构
  8. 数据结构——树状数组
  9. “找个心动的人就辣么难嘛 _ ” 别灰心,试试用了AI的Tinder
  10. ECMAScript 6 + Babel
  11. python list 分批batch
  12. linux修改键盘布局
  13. win7与xp 字体命名问题影响打印
  14. 安装win7时,显示缺少所需的CD/DVD驱动器设备驱动程序
  15. oracle中dbt是什么,汽车中的DBT是什么意思?
  16. When Color Constancy Goes Wrong:Correcting Improperly White-Balanced Images阅读札记
  17. Cocos Creator 热更新文件MD5计算和需要注意的问题
  18. SpringBoot 2-连接数据库、配置logback打印sql日志等
  19. 一个例程学会使用——模糊逻辑工具箱
  20. 不知道什么时候开始,35 岁突然成了 IT 人职业生涯的终结年龄

热门文章

  1. Conflux 网络(Hydra)2.2.1-fixpos 版本升级公告
  2. 【Unity3D】10行代码实现一个简单的角色移动旋转脚本
  3. 使用js制作一个3d模型
  4. 激活office时,提示CScript错误:无法找到ospp.vbs脚本引擎vbscript
  5. Android锁屏(四)
  6. 【Latex】编辑公式效率太低?来看一些MathType的重要技巧
  7. FFmpeg开发之旅(二)---音频解码
  8. confluence 字体_为confluence编辑器增加设置字体和设置字号的选项
  9. C语言qsort函数的使用,及自己实现的qsort函数
  10. 【linux驱动开发】i2c驱动框架之温湿度传感器htu21d