现在的需求的:

根据产品族、产品类型,下载该产品族、产品类型下面的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格式下载的更多相关文章

  1. 关于springmvc下服务器文件打包成zip格式下载功能

    关于springmvc下服务器文件打包成zip格式下载功能 2016年09月21日 11:22:14 toxic_guantou 阅读数:5731更多 个人分类: 技术点存储   版权声明:本文为博主 ...

  2. java批量将多文件打包成zip格式

    public void createzip(){ List<File> nFileList = new ArrayList<File>(); nFileList.add(new ...

  3. java将文件打包成ZIP压缩文件的工具类实例

    package com.lanp; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ja ...

  4. java实现将文件压缩成zip格式

    以下是将文件压缩成zip格式的工具类(复制后可以直接使用): zip4j.jar包下载地址:http://www.lingala.net/zip4j/download.php package util ...

  5. Springboot生成二维码并下载图片png支持打包成zip

    pom.xml <!--二维码--> <dependency> <groupId>com.google.zxing</groupId> <arti ...

  6. 多个文件下载打包生成zip格式下载

    这个多个文件下载生成zip格式必须先引用一个ICSharpCode.SharpZipLib.dll. 代码如下  //将多个文件打包成压缩文件zip格式下载         protected voi ...

  7. Java实现文件自动打包成zip并下载的代码

      import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java. ...

  8. 阿里云打包成zip格式,批量下载

    /** * 从阿里云下载文件 (以附件形式下载) 多个文件进行zip下载 第二种 * @param request * @param response */ @ResponseBody @Reques ...

  9. php 下载图片并打包成Zip格式压缩包

    前言:最近公司有个需要下载多个图片并打包成压缩包的需求,下面来看看具体是怎么做的 1.没什么说的,懒得说啥,直接看代码 /** * 下载图片并生成压缩包 * @param $data 图片数组,一维 ...

随机推荐

  1. 【各类MQ比较】消息队列MQ

    目前业界有很多MQ产品,我们作如下对比: RabbitMQ 是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它变的非常重量 ...

  2. python爬虫scrapy学习之篇二

    继上篇<python之urllib2简单解析HTML页面>之后学习使用Python比较有名的爬虫scrapy.网上搜到两篇相应的文档,一篇是较早版本的中文文档Scrapy 0.24 文档, ...

  3. bzoj 1799: [Ahoi2009]self 同类分布 数位dp

    1799: [Ahoi2009]self 同类分布 Time Limit: 50 Sec  Memory Limit: 64 MB[Submit][Status][Discuss] Descripti ...

  4. Windows 搭建 Linux kernal0.11 环境

    下载:http://www.oldlinux.org/Linux.old/bochs/ 安装bochs 运行 界面:

  5. Chain of Responsibility(责任链)

    意图: 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 适用性: 有多个的对象可以处理一个请求,哪个对 ...

  6. Qt5_vs2013_error_C2001: 常量中有换行符__资料

    ZC: Win7x64 + Qt551(x86) + vs2013(x86) ZC: 问题:UTF-8 在源码文件中有中文时,有时会报编译错误:C2001 & C2143 分析: --> ...

  7. 【Demo】CSS3元素旋转、缩放、移动或倾斜

    CSS3元素旋转.缩放.移动或倾斜 代码: <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  8. 转-Linux启动过程详解(inittab、rc.sysinit、rcX.d、rc.local)

    http://blog.chinaunix.net/space.php?uid=10167808&do=blog&id=26042   1)BIOS自检2)启动Grub/Lilo3)加 ...

  9. StringUtils 正则校验

    public class StringUtils { /** * 如果str为null,返回“”,否则返回str * @param str * @return */ public static Str ...

  10. Psping 实例

    PsPing v2.1 https://docs.microsoft.com/zh-cn/sysinternals/downloads/psping 2016/06/29 4 分钟阅读时长 By Ma ...