java实现批量下载实现批量下载 多文件打包成多文件打包成zip格式下载格式下载
主要为大家详细介绍了java实现批量下载、将多文件打包成zip格式下载,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了java实现批量下载的具体代码,供大家参考,具体内容如下
现在的需求的:
根据产品族、产品类型,下载该产品族、产品类型下面的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"));
评论0