案例一

    @ApiOperation(value = "根据id 批量下载文件", notes = "根据id 批量下载文件")
@RequestMapping(value = "/downloadFiles/{id}", method = RequestMethod.GET)
@ApiImplicitParam(name = "sheetId", value = "工单ID", required = true, dataType = "String", paramType = "path")
public void downloadFiles(HttpServletRequest request, HttpServletResponse response, @PathVariable String id) throws Exception {
List<OssMediaFile> list = null;
try {
EntityWrapper<OssMediaFile> wrapper = new EntityWrapper<>();
wrapper.eq("id", id);
wrapper.eq("is_delete", 0);
list = this.baseService.selectList(wrapper);
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
String header = request.getHeader("User-Agent").toUpperCase();
String fileName = "附件" + String.valueOf(System.currentTimeMillis()) + ".zip";
if (!header.contains("MSIE") && !header.contains("TRIDENT") && !header.contains("EDGE")) {
fileName = new String(fileName.getBytes(), "ISO8859-1");
} else {
fileName = URLEncoder.encode(fileName, "utf-8");
fileName = fileName.replace("+", "%20");
}
response.setContentType("multipart/form-data");
response.setHeader("Content-disposition", "attachment; filename=" + fileName);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
try(ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream())) {
for (int i = 0; i < list.size(); i++) {
OssMediaFile mediaFile = list.get(i);
logger.info("ossMediaFile参数:{}", JSONObject.toJSONString(mediaFile));
InputStream is = null;
try {
zipOut.putNextEntry(new ZipEntry(mediaFile.getFileName()));
String urlName = mediaFile.getFileUrl();
URL url = new URL(urlName);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 设置是否向HttpURLConnection输出
conn.setDoOutput(false);
// 设置是否从httpUrlConnection读入
conn.setDoInput(true);
/** 设置连接方式:GET */
conn.setRequestMethod("GET");
/** 设置连接主机服务器超时时间:5000毫秒 */
conn.setConnectTimeout(5000);
/** 发送GET方式请求,使用connet方法建立和远程资源之间的实际连接即可 */
conn.connect();
int status = conn.getResponseCode();
logger.info("---status:" + status);
if(status!= HttpURLConnection.HTTP_OK){
is = conn.getErrorStream();
}else{
is = conn.getInputStream();
}
if (null == is) {
continue;
}
int temp = 0;
while ((temp = is.read()) != -1) {
zipOut.write(temp);
}
is.close();
/** 关闭远程连接 */
conn.disconnect();
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
}
zipOut.closeEntry();
logger.info("一键下载结束");
} catch (Exception e) {
logger.error(e.getMessage(), e);
throw new RuntimeException("附件下载失败");
}
}

JAVA-批量下载zip的更多相关文章

  1. java批量下载,将多文件打包成zip格式下载

    现在的需求的: 根据产品族.产品类型,下载该产品族.产品类型下面的pic包: pic包是zip压缩文件: t_product表: 这些包以blob形式存在另一张表中: t_imagefile表: 现在 ...

  2. Java批量下载文件并zip打包

    客户需求:列表勾选需要的信息,点击批量下载文件的功能.这里分享下我们系统的解决方案:先生成要下载的文件,然后将其进行压缩,生成zip压缩文件,然后使用浏览器的下载功能即可完成批量下载的需求.以下是zi ...

  3. java批量下载文件为zip包

    批量下载文件为zip包的工具类 package com.meeno.trainsys.util; import javax.servlet.http.HttpServletRequest; impor ...

  4. java批量下载

    最近做了一些有关批量压缩下载的功能,网上也找了一些资源,但都不是太全面,所以自己整理一份,已备不时之需. 直接上代码: // 获取项目路径     private static String WEBC ...

  5. Java 批量下载excel,并对excel赋值,压缩为zip文件(POI版)

    package com.neusoft.nda.servlet; import java.io.File;import java.io.FileInputStream;import java.io.F ...

  6. java+批量下载文件到指定文件夹

    需求 导出文件后存留在了服务器中,需要提供下载按钮,点击后可下载到本地:(因为涉及多个文件,下载前先将文件进行压缩,提供下载压缩文件) 效果预览 代码 主要方法 /**     * 下载生成的所有在线 ...

  7. java+批量下载大文件

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 这次项目的需求: 支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,i ...

  8. JAVA 批量下载服务器文件到本地指定文件夹并重命名

    /** * @功能 下载文件到指定文件夹并重命名 * @param url 请求的路径 * @param filePath 文件将要保存的目录 * @param filename 保存到本地的文件名 ...

  9. java/resteasy批量下载存储在阿里云OSS上的文件,并打包压缩

    现在需要从oss上面批量下载文件并压缩打包,搜了很多相关博客,均是缺胳膊少腿,要么是和官网说法不一,要么就压缩包工具类不给出 官方API https://help.aliyun.com/documen ...

  10. Java批量文件打包下载zip

    网上看了很多,本文使用ant.jar中的org.apache.tools.zip,页面用js表单提交 代码供参考: ACTION: /* * 另存为 */ @RequestMapping(" ...

随机推荐

  1. 【Linux】常用

    查看端口占用 yum install lsof lsof -i:8080:查看8080端口占用 lsof abc.txt:显示开启文件abc.txt的进程 lsof -c abc:显示abc进程现在打 ...

  2. java学习一:java介绍及第一个helloword程序

    1.java语言介绍 java是一门后台开发语言 大型web语言系统开发,app后台服务首选开发语言 java这门语言大特点:跨平台,安全性高,有丰富的类库 核心思想:面向对象 2.Jdk介绍 3.为 ...

  3. 第二性 合卷本 横本.PDF

    书本详情 第二性台版 作者: 西蒙.德.波娃(Simone de Beauvoir)出版社: 貓頭鷹原作名: Le Deuxième Sexe译者: 邱瑞鑾出版年: 2013-10页数: 1136装帧 ...

  4. AI-Chat问答随笔

    Q: 操作系统和驱动的关系 A:操作系统和驱动程序是紧密相关的,它们一起构成了计算机系统中的软件部分,实现了对硬件资源的管理和控制.操作系统作为计算机系统的核心软件,主要负责管理和协调计算机系统中的各 ...

  5. pytest(5)-自定义用例顺序(pytest-ordering)-后续学习

    前言 测试用例在设计的时候,我们一般要求不要有先后顺序,用例是可以打乱了执行的,这样才能达到测试的效果. 有些同学在写用例的时候,用例写了先后顺序, 有先后顺序后,后面还会有新的问题(如:上个用例返回 ...

  6. Android Studio Gradle 输出信息乱码

    Android Studio Gradle 输出信息出现乱码 如下: > Task :app:compileDebugJavaWithJavacע: ijЩ�����ļ�ʹ�û����ѹ�ʱ�� ...

  7. syntax_lead_x.txt

    select lead( t1.field_date-1, 1, null ) over(partition by t1.field_str order by t1.field_str),*from ...

  8. 简单理解gqrx是什么

    gqrx:Gqrx是一个基于gnuradio和Qt架构,开发的一个开源的SDR接收机的应用.下图是他的一个运行界面: gnu radio GNU Radio是一个自由软件开发工具包,提供实现软件无线电 ...

  9. Doris使用记录

    创建分区表: CREATE TABLE `test_partitioned` ( `gmt_create` datetime NULL COMMENT "创建时间", `colum ...

  10. R语言广义线性模型(GLM)、全子集回归模型选择、检验分析全国风向气候数据|附代码数据

    全文链接:http://tecdat.cn/?p=30914 最近我们被客户要求撰写关于广义线性模型(GLM)的研究报告,包括一些图形和统计输出. 我们正和一位朋友讨论如何在R软件中用GLM模型处理全 ...