/*** 将文件打成压缩包下载** @param zipModelDTOList 文件集合* @param uploadType 文件类型(OSS或FASTDFS)* @param response* @return void*/
public static void downloadZipFiles(HttpServletResponse response, List<ZipModelDTO> zipModelDTOList, String uploadType) {try {response.reset();response.setCharacterEncoding("UTF-8");// 不同类型的文件对应不同的MIME类型response.setContentType("application/json;charset=utf-8");// --设置成这样可以不用保存在本地,再输出, 通过response流输出,直接输出到客户端浏览器中。ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
// 设置读取数据缓存大小
byte[] buffer = null;
try {// 循环读取文件路径集合,获取每一个文件的路径for (ZipModelDTO zipModelDTO : zipModelDTOList) {// 阿里oss 方式文件存储if (uploadType.equals(CommonConstant.UPLOAD_TYPE_FASTDFS)) {// 创建输入流读取文件buffer = FastdfsUtil.getFileStream(zipModelDTO.getFilePath());zipWrite(response, zipModelDTO, buffer, zos);}if (uploadType.equals(CommonConstant.UPLOAD_TYPE_OSS)) {// 创建输入流读取文件buffer = OssUtil.getFileStream(zipModelDTO.getFilePath());zipWrite(response, zipModelDTO, buffer, zos);}}
} catch (IOException e) {throw new PdException(e.getMessage());
} finally {if (null != zos) {try {zos.close();} catch (IOException e) {throw new PdException(e.getMessage());}}
}} catch (IOException e) {e.printStackTrace();}
}
public static void zipWrite(HttpServletResponse response, ZipModelDTO zipModelDTO, byte[] buffer, ZipOutputStream zos) throws IOException {// 对文件名进行编码处理中文问题String zipBimName = new String(zipModelDTO.getFileName().getBytes(), StandardCharsets.UTF_8);// inline在浏览器中直接显示,不提示用户下载// attachment弹出对话框,提示用户进行下载保存本地// 默认为inline方式response.setHeader("Content-Disposition", "attachment;filename=" + zipBimName);response.setHeader("Access-Control-Allow-Origin", "*");// 将文件写入zip内,即将文件进行打包zos.putNextEntry(new ZipEntry(zipBimName + zipModelDTO.getFileExtension()));// 写入文件的方法,同上int size = 0;// 设置读取数据缓存大小zos.write(buffer, 0, buffer.length);// 关闭输入输出流// zos.closeEntry();
}

用到的工具包

 /*** FastdfsUtil获取文件缓存流*/@Value("${fdfs.groupName}")private String fdfsGroupName;@Autowiredprivate FastFileStorageClient client;private static FastdfsUtil fastdfsUtil;@PostConstructpublic void init() {fastdfsUtil = this;}public static byte[] getFileStream(String fileUrl) {// 分离文件分组String group = fileUrl.substring(0, fileUrl.indexOf("/"));// 分离文件路径String path = fileUrl.substring(fileUrl.indexOf("/") + 1);// 进行文件下载byte[] buffer = fastdfsUtil.client.downloadFile(group, path, new DownloadByteArray());return buffer;}/*** OssUtil获取文件缓存流*//*** ---------变量----------*/@Value("${aliyun.oss.endpoint}")private String endpoint;@Value("${aliyun.oss.accessKeyId}")private String accessKeyId;@Value("${aliyun.oss.accessKeySecret}")private String accessKeySecret;@Value("${aliyun.oss.bucketName}")private String bucketName;// 文件存储目录private static String filedir = "workbook/";private static OssUtil ossUtil;private static OSS ossClient;@PostConstructpublic void init() {ossUtil = this;ossClient = new OSSClientBuilder().build(ossUtil.endpoint, ossUtil.accessKeyId, ossUtil.accessKeySecret);}public static byte[] getFileStream(String fileUrl) throws IOException {// ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。// OSS ossClient = new OSSClientBuilder().build(ossUtil.endpoint, ossUtil.accessKeyId, ossUtil.accessKeySecret);OSSObject ossObject = ossClient.getObject(ossUtil.bucketName, fileUrl);// 读取文件内容。InputStream inputStream = ossObject.getObjectContent();// 把输入流放入缓存流BufferedInputStream in = new BufferedInputStream(inputStream);// byte[] buffer = inputStream.readAllBytes(); //java 11ByteArrayOutputStream swapStream = new ByteArrayOutputStream();byte[] buff = new byte[1024];int rc = 0;while ((rc = inputStream.read(buff, 0, 1024)) > 0) {swapStream.write(buff, 0, rc);}byte[] in_b = swapStream.toByteArray();return in_b;}

将文件打成压缩包下载(OSS或FASTDFS)相关推荐

  1. springboot 后台把数据制作成excel表格并打成压缩包下载

    项目里面遇到要把数据做成资料卡片,然后写入单独的excel文件,之后打成压缩包下载.这个过程记录一下,希望对大家有用. 1.在controller里面开个口子,接收客户端的请求.由于vue里面用了do ...

  2. Ruoyi实现单文件上传和多文件打包压缩包下载

    目录 单文件上传篇 1.html 2.JS 3.Controller 3.1 Global.getProfile() 3.3.1 JarBasePath.getBaseJarPathStr() 3.2 ...

  3. Java将多个文件打成一个压缩包

    Java将多文件打成压缩包 package com.filezip;import org.apache.commons.io.IOUtils;import java.io.*; import java ...

  4. JAVA代码实现下载单个文件,和下载打包文件

    //下载单个文件调用方法 /**     * response     * imgPath 下载图片地址     * fileName 保存下载文件名称     * @date 2015年4月14日 ...

  5. Java 文件压缩及下载

    /*** @author zshuo* @date 2019/3/16*/ public class FileUtil {/*** 把文件打成压缩包并保存在本地硬盘*/public static vo ...

  6. 【java】 将服务器上文件夹上所有文件打包并下载

    功能要求:教师端要将学生上传的报告按班级进行打包下载. 前台HTML如下: <td align="right"><button class="layui ...

  7. Java通过流的方式从OSS打压缩包下载或者直接下载文件,并返回输出流给前端(弹框选择下载路径)

    需求 提供一个接口,前端通过按钮下载文件,根据不同的id下载对应的文件,由于都是多个文件,需要进行打压缩包下载,文件保存在oss服务器上 注意:我的压缩包名称和文件名称都是通过日期或者uuid生成的, ...

  8. 使用函数计算打包下载OSS文件

    简介:打包下载OSS上存储的多个文件是一个常见的需求,例如将 OSS 上的一个目录打包下载.这样可以节省网络传输的数据,达到减少费用和下载时间的效果.使用函数计算可以很方便地实现这个需求. 需求 打包 ...

  9. 场景实践:使用函数计算打包下载OSS文件

    体验简介 本场景将提供一台配置了Centos 7.7版本的ECS实例(云服务器)和对象存储OSS实例. 通过本教程的操作,您可以基于已有的环境使用函数计算将对象存储OSS上多个文件(Object)打包 ...

  10. 批量下载,打成压缩包

    最近遇到需要批量下载的功能,上网查找了很多资料.自己做一个备忘录,下次 遇到这个功能 不用 百度了: 批量下载,打成压缩包 public static void downloadFile(List&l ...

最新文章

  1. Building for Production
  2. mysql 语句除法_SQL的查询语句(除法)
  3. RTC时间在LCD上显示需注意的问题
  4. Qt实现对json文件的解析
  5. python3之后版本读取网页的内容
  6. CentOS 7安装MongoDB
  7. mysql数据签名功能_分析型数据库 MySQL的签名机制有哪些? -问答-阿里云开发者社区-阿里云...
  8. 《数据库原理》——知识点总结(期末复习)
  9. 彻底解决Vista狂读硬盘,硬盘灯狂闪的问题
  10. 模模搭升级,场景自动同步ThingJS平台,搭建开发无缝衔接!
  11. 高通平台开发系列讲解(AI篇)高通神经网络处理引擎 SNPE SDK架构
  12. Freda的访客 【找规律+快速幂】
  13. pdf转换成word怎么转换?这个方法一学就会!
  14. 正则表达式的基本语法规则
  15. 基于SSM实现在线考试系统
  16. 杭电oj(java)1091
  17. Unity3D键盘输入被输入法屏蔽
  18. 向日葵客户端 for Android,向日葵远程控制for Android 3.1 发布
  19. Sencha Touch 与 PhoneGap异同
  20. 【Sublime text 3】卸载重装Sublime text 3英文版

热门文章

  1. 微信小程序如何做触底加载分页功能
  2. r语言员工离职_基于随机森林的优秀员工离职因素实证分析及预测
  3. 未来十年最紧缺的职业
  4. 笔记本电脑桌面不显示计算机,笔记本电脑屏幕不显示怎么回事
  5. 前端学习路线(详细)
  6. 用计算机rap歌词,Rap歌词
  7. 基于SVM的中文垃圾短信分类
  8. 《关键对话——如何高效能沟通》读书笔记
  9. Mac模拟器进行远程调试
  10. 采用计算机辅助数据收集,关于计算机在数据收集中的作用分析