现在的需求的:

根据产品族、产品类型,下载该产品族、产品类型下面的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. 如何表示各个时区的时间DateTime.ToString()

    使用sqlite进行时间的插入的时候,使用了 DateTime.ToString("s")  //s: 2008-06-15T21:15:07 插入到数据库之后,发现时间被加了8个 ...

  2. Decorator(装饰)

    意图: 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 适用性: 在不影响其他对象的情况下,以动态.透明的方式给单个对象添加职责. 处理那些可以撤消 ...

  3. QtTcp_资料

    1.百度搜索关键字“Qt TCP” 2. 2.1.Qt学习之路_5(Qt TCP的初步使用) http://www.cnblogs.com/tornadomeet/archive/2012/06/30 ...

  4. InfiniBand 与Intel Omni-Path Architecture

    Intel Omni-Path Architecture (OPA) 是一种与InfiniBand相似的网络架构 可以用来避免以下PCI总线一些缺陷: 1.由于采用了基于总线的共享传输模式,在PCI总 ...

  5. 不能用Xming连接到 Centos 7

    修改/etc/gdm/custom.conf 之后, Centos 6是没有问题的. 可是Centos 7 不行. 根据这个连接,运行firewall-config,把网络改到trusted级别, 能 ...

  6. hdu2897找规律

    又是找规律,无语了,说好的博弈呢,搞了半天的sg函数没有一点头绪 当n%(p+q)==0时,先手win,第一次取q个,以后每次,后手取k个,先手就取p+q-k个,最后,后手必取q个 当n=(p+q)* ...

  7. offsetParent.scrollTop IE下一直报错,说“缺少对象”

    <div style="position:fiexd; top:135px;_position: absolute; right: 0pt; _top:expression_r(off ...

  8. [转载]CentOS 6.3安装Subversion服务器

    转载自http://www.cnblogs.com/zhoulf/archive/2013/02/02/2889949.html 安装说明 系统环境:CentOS-6.3 安装方式:yum insta ...

  9. 001——数组(一)数组知识及foreach函数应用

    <?php /**数组(一)数组知识及foreach函数应用*/ /*数组:在一个变量中,存储一个或多个值,每一个元素都有一个访问ID * * */ /* * //索引型数组 $arr=arra ...

  10. BOM之其他浏览器对象的使用

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...