java批量下载,将多文件打包成zip格式下载
现在的需求的:
根据产品族、产品类型,下载该产品族、产品类型下面的pic包;
pic包是zip压缩文件;
t_product表:
这些包以blob形式存在另一张表中:
t_imagefile表:
现在要做的是:将接入网、OLT下面的两个包downloadPIC:MA5800系列-pic.zip 和 MA5900-pic.rar一起打包成zip压缩文件下载下来;
代码:
ProductController.java:
/**
* 根据产品族、产品类型下载照片包
*/
@RequestMapping("/downloadwBatch")
public void downloadwBatch(HttpServletRequest request, HttpServletResponse response, String productFamily, String productType){
//http://localhost:8080/MySSM/downloadwBatch?productFamily=接入网&productType=OLT
try {
productFamily = new String(productFamily.getBytes("iso-8859-1"), "utf-8");
productType = new String(productType.getBytes("iso-8859-1"), "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} //获取要下载的照片包名
Map<String, String> params = new HashMap<String, String>();
params.put("productFamily", productFamily);
params.put("productType", productType);
List<String> packageNames = productService.getPackageNamesByFamilyAndType(params); //根据包名获取待下载的文件 文件名-字节数组的形式
Map<String, byte[]> files = new HashMap<String, byte[]>();
for(String packageName : packageNames){
byte[] f = productService.getPackage(packageName);
if(f!=null){
files.put(packageName, f);
}
} //设置下载的压缩包名
String zipName = productFamily + "_"+ productType + ".zip"; //根据文件,进行压缩,批量下载
if(files.size() > 0){
productService.downloadBatchByFile(response, files, zipName);
} }
ProductService.java:
/**
* 根据包名获取文件
*/
public byte[] getPackage(String packageName){
byte[] bag = null;
try{
ImageFile m = productMapper.getPackage(packageName);
if(m!=null){
bag = m.getPicture();
}
}catch(Exception e){
e.printStackTrace();
}
return bag;
} /**
* 根据产品族、产品类型 获取待下载的包名
* @param params
* @return
*/
public List<String> getPackageNamesByFamilyAndType(Map<String, String> params) {
List<String> packageNames = productMapper.getPackageNamesByFamilyAndType(params); return packageNames;
} /**
* 根据文件,进行压缩,批量下载
* @param response
* @param files
* @throws Exception
*/
public void downloadBatchByFile(HttpServletResponse response, Map<String, byte[]> files, String zipName){
try{
response.setContentType("application/x-msdownload");
response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(zipName, "utf-8")); ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
BufferedOutputStream bos = new BufferedOutputStream(zos); for(Entry<String, byte[]> entry : files.entrySet()){
String fileName = entry.getKey(); //每个zip文件名
byte[] file = entry.getValue(); //这个zip文件的字节 BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(file));
zos.putNextEntry(new ZipEntry(fileName)); int len = 0;
byte[] buf = new byte[10 * 1024];
while( (len=bis.read(buf, 0, buf.length)) != -1){
bos.write(buf, 0, len);
}
bis.close();
bos.flush();
}
bos.close();
}catch(Exception e){
e.printStackTrace();
}
}
ProductMapper.java:
/**
* 根据包名获取文件
*/
public ImageFile getPackage(String packageName) throws Exception; /**
* 据产品族、产品类型 获取待下载的包名
*/
public List<String> getPackageNamesByFamilyAndType(Map<String, String> params);
ProductMapper.xml:
<!-- 根据包名获取文件 -->
<select id="getPackage" parameterType="java.lang.String" resultType="com.cy.model.ImageFile">
select * from t_imagefile where packageName = #{packageName}
</select> <!-- 跟据产品族、产品类型 获取待下载的包名 -->
<select id="getPackageNamesByFamilyAndType" parameterType="java.util.Map" resultType="java.lang.String">
select packageName from t_imagefile m join t_product p on m.packageName = p.downloadPic
where p.productFamily = #{productFamily} and p.productType = #{productType}
</select>
测试:
在浏览器中输入:http://localhost:8080/MySSM/downloadwBatch?productFamily=接入网&productType=OLT
下载结果如下:
---------
java批量下载,将多文件打包成zip格式下载的更多相关文章
- 关于springmvc下服务器文件打包成zip格式下载功能
关于springmvc下服务器文件打包成zip格式下载功能 2016年09月21日 11:22:14 toxic_guantou 阅读数:5731更多 个人分类: 技术点存储 版权声明:本文为博主 ...
- java批量将多文件打包成zip格式
public void createzip(){ List<File> nFileList = new ArrayList<File>(); nFileList.add(new ...
- java将文件打包成ZIP压缩文件的工具类实例
package com.lanp; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ja ...
- java实现将文件压缩成zip格式
以下是将文件压缩成zip格式的工具类(复制后可以直接使用): zip4j.jar包下载地址:http://www.lingala.net/zip4j/download.php package util ...
- Springboot生成二维码并下载图片png支持打包成zip
pom.xml <!--二维码--> <dependency> <groupId>com.google.zxing</groupId> <arti ...
- 多个文件下载打包生成zip格式下载
这个多个文件下载生成zip格式必须先引用一个ICSharpCode.SharpZipLib.dll. 代码如下 //将多个文件打包成压缩文件zip格式下载 protected voi ...
- Java实现文件自动打包成zip并下载的代码
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java. ...
- 阿里云打包成zip格式,批量下载
/** * 从阿里云下载文件 (以附件形式下载) 多个文件进行zip下载 第二种 * @param request * @param response */ @ResponseBody @Reques ...
- php 下载图片并打包成Zip格式压缩包
前言:最近公司有个需要下载多个图片并打包成压缩包的需求,下面来看看具体是怎么做的 1.没什么说的,懒得说啥,直接看代码 /** * 下载图片并生成压缩包 * @param $data 图片数组,一维 ...
随机推荐
- BloomFilter–大规模数据处理利器
转自: http://www.dbafree.net/?p=36 BloomFilter–大规模数据处理利器 Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法. ...
- java分布式系统开关功能设计(服务升降级)
问题一:在单个java系统中如何实现开关功能? 其实对于开关来说,对应Java中的类型,很好映射,就是一个boolean值,在需要做开关操作的地方,调用这个属性,判断状态,然后走相应的 ...
- D3.js学习笔记(六)——SVG基础图形和D3.js
目标 在这一章,我们将会重温SVG图形,学习如何使用D3.js来创建这些图形. 这里会包括前面例子中的SVG基础图形以及如何使用D3.js设置图形的属性. 使用D3.js画一个SVG 的 圆 circ ...
- 后端利用Redis队列及哈希实现定时推送提醒的三个思路
周煦辰 2016年8月31日 本文介绍了一下本人在开发过程中遇到"定时推送提醒"的需求的时候所思考的三种解决方案. 明确问题 首先明确一下这个需求可能包含的几个"坑&qu ...
- 递归--练习5--noi1751分解因数
递归--练习5--noi1751分解因数 一.心得 想清楚子问题 想清楚递推表达式 没有全部AC说明还有自己没有想到的位置,试边界情况和查看题目要求 二.题目 1751:分解因数 总时间限制: 10 ...
- phpstorm 2017版代码提示功能开启解决方案
安装好phpstorm 2017之后 发现代码高亮和函数自动提示都失效了 在phpstorm底部面板的信息提示处发现有一条系统消息: 12:04:18 Power save mode is on Co ...
- Java网络编程和NIO详解4:浅析NIO包中的Buffer、Channel 和 Selector
Java网络编程与NIO详解4:浅析NIO包中的Buffer.Channel 和 Selector 转自https://www.javadoop.com/post/nio-and-aio 本系列文章首 ...
- IEnumerable的用法
本文导读:IEnumerable和IEnumerable<T>接口在.NET中是非常重要的接口,它允许开发人员定义foreach语句功能的实现并支持非泛型方法的简单的迭代,IEnumera ...
- Mybatis generator 配置
mybatis-generator.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ...
- Kubernetes实践--hello world 示例
本文所说的Hello world是一个web留言板应用,并且是基于PHP+Redis的两层分布式架构的web应用,前端PHP web网站通过访问后端Redis数据库完成用户留言的查询和添加功能,具备读 ...