需求: 网络多文件下载并压缩,然后对压缩文件进行加密操作。

一、基本思路:

1. 循环URL list通过RUI获取文件流生成本地文件,add进文件集合

2. zip文件 add普通文件集合,生成压缩文件

3. response 下载。通过压缩文件路径获取文件流,写入outputstream

二、代码实现

maven依赖

        <dependency><groupId>net.lingala.zip4j</groupId><artifactId>zip4j</artifactId><version>1.3.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version></dependency>

下载文件代码如下:

import cn.hutool.core.date.DateUtil;
import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.util.Zip4jConstants;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.springframework.util.ResourceUtils;import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URI;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;/*** * @param response* @param urls 文件url* @param zipName 压缩文件名称*/public static void downloadZip(HttpServletResponse response, List<String> urls, String zipName) {try {String filePath = "~/Downloads/";String fileName = zipName + DateUtil.format(new Date(), "yyyyMMddHHmmss") + ".zip";ZipFile zipFile = getZipStream(urls, UserUtil.getUserAccount(), filePath + fileName);InputStream fis = new BufferedInputStream(new FileInputStream(filePath + fileName));response.setCharacterEncoding("UTF-8");response.setHeader("Content-Disposition","attachment; filename=" + new String(fileName.getBytes("ISO8859-1"), "UTF-8"));response.setContentLength((int) zipFile.getFile().length());response.setContentType("application/zip");// 定义输出类型BufferedInputStream buff = new BufferedInputStream(fis);byte[] b = new byte[1024];// 相当于我们的缓存long k = 0;// 该值用于计算当前实际下载了多少字节OutputStream myout = response.getOutputStream();// 从response对象中得到输出流,准备下载// 开始循环下载while (k < zipFile.getFile().length()) {int j = buff.read(b, 0, 1024);k += j;myout.write(b, 0, j);}myout.flush();buff.close();zipFile.getFile().delete();} catch (Exception e) {e.printStackTrace();}}/*** * @param fileUrls 文件urls* @param password 压缩加密字符串* @param zipFileName 压缩包全路径(包括路径和文件名)* @return* @throws IOException* @throws ZipException*/public static ZipFile getZipStream(List<String> fileUrls, String password, String zipFileName) throws IOException, ZipException {if (fileUrls != null && fileUrls.size() > 0) {ArrayList<File> filesToAdd = new ArrayList<>();for (String fileUrl : fileUrls) {URI uri = URI.create(fileUrl);String name = FilenameUtils.getName(uri.getPath());System.out.println(name);File file = new File("~/Downloads/" + name);FileUtils.copyInputStreamToFile(uri.toURL().openStream(), file);filesToAdd.add(file);}ZipParameters parameters = new ZipParameters();parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);//压缩方式parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);//压缩级别parameters.setEncryptFiles(true);parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);//加密方式parameters.setPassword(password);ZipFile zipFile = new ZipFile(zipFileName);zipFile.setFileNameCharset("gbk");zipFile.addFiles(filesToAdd, parameters);if (filesToAdd.size() > 0) {for (File file : filesToAdd) {file.delete();}}return zipFile;}return null;}

java多文件文件压缩加密下载相关推荐

  1. java文件夹压缩加密

    文件夹压缩加密 import net.lingala.zip4j.core.ZipFile; import net.lingala.zip4j.exception.ZipException; impo ...

  2. java-多文件边压缩边下载

    //已停止任务文件下载      public void zipStoptaskDownloadFiles(List<Record> tasklist){          HttpSer ...

  3. C# 将服务器文件批量压缩打包下载至本地两种方法(压缩包缓存到服务器下载、压缩包缓存到内存下载)

    1.将服务器文件打包下载至本地(压缩包缓存到服务器下载) (1)文件批量压缩成压缩包并缓存到服务器(公共方法) using ICSharpCode.SharpZipLib.Checksums; usi ...

  4. linux下如何压缩文件夹加密,linux下的文件/文件夹压缩加密方法

    1. 文件//文件夹加密 zip -e linuxzgf.zip linuxzgf 即可出现输入密码的提示,输入2次密码. 此文件即被加密解压时候是需要密码的 文件夹加密: zip -re linux ...

  5. java 多重压缩下载_Java 多文件边压缩边下载

    有时我们希望在后台实时生成文件并下载到客户端 @GetMapping(value = "download") public void download(HttpServletRes ...

  6. 多文件在线压缩并下载

    开发背景:某医院的简历系统,由求职者在前台填写在线简历,并且上传简历文件(一般为Word.PDF文件.开放性上传,名称也无法统一). 现客户要求在后台批量下载简历,并且要求以"意向岗位+姓名 ...

  7. java压缩文件夹并加密

    工作遇到,记录下 import net.lingala.zip4j.core.ZipFile; import net.lingala.zip4j.exception.ZipException; imp ...

  8. java文件下载接口_javaweb通过接口来实现多个文件压缩和下载(包括单文件下载,多文件批量下载)...

    @RequestMapping("/uploads")public void recursion(String root, Vector vecFile,HttpServletRe ...

  9. javaweb通过接口来实现多个文件压缩和下载(包括单文件下载,多文件批量下载)

      程序员在做web等项目的时候,往往都需要添加文件上传.下载.删除的功能,有时是单文件,有时多文件批量 操作,而这些功能的代码程序员可以自己收藏起来当成工具使用,这样,程序员在进行程序设计的时候就会 ...

  10. 文件夹压缩并设置加密密码

    Windows rar文件加密 进入到winrar的安装目录,然后按照输入指定的命令即可完成文件的压缩加密 以下是bat脚本实现加密码压缩文件夹的例子: @echo off :: ---------- ...

最新文章

  1. Postgresql 日志收集
  2. 查询已安装rpm包信息
  3. 阿里云上创建个人网站
  4. 年龄与疾病(信息学奥赛一本通-T1106)
  5. 基于JAVA+SpringBoot+Mybatis+MYSQL的客户关系CRM系统
  6. Windows10 中在指定目录下启动Powershell
  7. js之数组去重的方法
  8. 销售自用计算机损益计入哪里,用友创业者4.0下的ERP沙盘模拟经营规则中,销售所需紧急采购产品时,按成品直接成本的(    )倍直接扣除现金,付款即到货,紧急采购多付出的成本计入费用表损失项。...
  9. QT之如何添加现有文件
  10. 济南市公安局人口数据备份库项目(数据复制)之二
  11. 计算机图像相关应用研究,计算机图像处理技术的应用探讨.pdf
  12. 白帽子(5)- 命令注入与代码注入区别
  13. DAO层,Service层,Controller层的作用
  14. window.showModalDialog 简介
  15. 牛津初阶字典精华总结
  16. 阿里云服务器优惠活动地址
  17. lambda表达式:
  18. 探究 EIP-4488 —— Rollup 助燃剂
  19. 802.11a/g/n下子载波数量、子载波间隔、数据速率的相关问题
  20. 独家算力支持|腾讯“开悟”AI大赛启动

热门文章

  1. python系统开发_证券交易系统设计与开发
  2. 大学英语精读第二版(第五册)复习笔记——文章内容摘要
  3. 关于炼丹,你是否知道这些细节?
  4. c# 中通快递对接_C#快递鸟物流查询接口API对接调用源码
  5. springboot 整合mybatis,pagehelper。测试类。
  6. Mediawiki 使用
  7. Wifi OKC 验证
  8. 数据库迁移(MySQL函数转化为Oracle函数)
  9. 【PyTorch问题】Tensor for ‘out‘ is on CPU, Tensor for argument #1 ‘self‘ is on CPU,but expected them...略
  10. 基于Apriori算法的高职大学生就业能力的研究