JAVA-批量下载zip
案例一
@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的更多相关文章
- java批量下载,将多文件打包成zip格式下载
现在的需求的: 根据产品族.产品类型,下载该产品族.产品类型下面的pic包: pic包是zip压缩文件: t_product表: 这些包以blob形式存在另一张表中: t_imagefile表: 现在 ...
- Java批量下载文件并zip打包
客户需求:列表勾选需要的信息,点击批量下载文件的功能.这里分享下我们系统的解决方案:先生成要下载的文件,然后将其进行压缩,生成zip压缩文件,然后使用浏览器的下载功能即可完成批量下载的需求.以下是zi ...
- java批量下载文件为zip包
批量下载文件为zip包的工具类 package com.meeno.trainsys.util; import javax.servlet.http.HttpServletRequest; impor ...
- java批量下载
最近做了一些有关批量压缩下载的功能,网上也找了一些资源,但都不是太全面,所以自己整理一份,已备不时之需. 直接上代码: // 获取项目路径 private static String WEBC ...
- Java 批量下载excel,并对excel赋值,压缩为zip文件(POI版)
package com.neusoft.nda.servlet; import java.io.File;import java.io.FileInputStream;import java.io.F ...
- java+批量下载文件到指定文件夹
需求 导出文件后存留在了服务器中,需要提供下载按钮,点击后可下载到本地:(因为涉及多个文件,下载前先将文件进行压缩,提供下载压缩文件) 效果预览 代码 主要方法 /** * 下载生成的所有在线 ...
- java+批量下载大文件
我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 这次项目的需求: 支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,i ...
- JAVA 批量下载服务器文件到本地指定文件夹并重命名
/** * @功能 下载文件到指定文件夹并重命名 * @param url 请求的路径 * @param filePath 文件将要保存的目录 * @param filename 保存到本地的文件名 ...
- java/resteasy批量下载存储在阿里云OSS上的文件,并打包压缩
现在需要从oss上面批量下载文件并压缩打包,搜了很多相关博客,均是缺胳膊少腿,要么是和官网说法不一,要么就压缩包工具类不给出 官方API https://help.aliyun.com/documen ...
- Java批量文件打包下载zip
网上看了很多,本文使用ant.jar中的org.apache.tools.zip,页面用js表单提交 代码供参考: ACTION: /* * 另存为 */ @RequestMapping(" ...
随机推荐
- OS-lab3
OS-lab3 lab2之后,我们能够通过MMU访问内存了,不过操作系统最重要的是能够让进程运行. include env.h 定义了进程控制相关的变量,如进程数量NENV.进程状态ENV_FREE等 ...
- Windows下的挖矿木马查杀
MS016小组(原创) 上一篇文章 简单讲了一下挖矿木马 大概流程 文章地址: https://www.cnblogs.com/ms016/articles/7978880.html 今天讲分析一个 ...
- 51电子-STC89C51开发板:使用KEIL编译汇编代码
全部内容请点击目录列表查看: 51电子-STC89C51开发板:<目录> --------------------------- 正文开始 ---------------------- ...
- vue2源码学习2vuex&vue-router
1.vue插件编写 插件可以实现对象vue的拓展,比如新增全局属性/方法,添加实例方法,使用mixin混入其他配置项等等.编写插件必须要实现 install 方法,当调用Vue.use()使用插件时, ...
- T14 风扇狂转修整TPFanControl.ini 屏蔽pwr
//注意标红部份屏蔽pwr //NEW: Set UseTWR=1 to see more sensors, will work only on newer T4xx// ATTENTION: if ...
- 控制台程序console输入参数 获取参数
class Program { static void Main(string[] args) { i ...
- QueryDet: Cascaded Sparse Query for Accelerating High-Resolution Small Object Detection(QueryDet:用于加速高分辨率小目标检测的级联稀疏查询)
QueryDet: Cascaded Sparse Query for Accelerating High-Resolution Small Object Detection(QueryDet:用于加 ...
- execsnoop
作用 execsnoop通过ftrace实时监控进程的exec()行为,输出短时进程的信息,包括进程 PID.父进程 PID.命令行参数以及执行的结果. 安装execsnoop git clone - ...
- vue 点击元素滚动到指定位置(滑动到指定位置对应标签自动选中)
一:各个模块不相同情况 1.内容部分<div class="anchor"> <div v-for="(item,index) in anchors&q ...
- Windows Defender锁定UI
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender Security Center 看下这个项下的子项有没有被添加值 ...