//文件打包下载
    public static HttpServletResponse
downLoadFiles(List<File> files,
            HttpServletRequest
request, HttpServletResponse response)
            throws Exception {
        try {
            /**这个集合就是你想要打包的所有文件,
             * 这里假设已经准备好了所要打包的文件*/
            //List<File>
files = new ArrayList<File>();
     
            /**创建一个临时压缩文件,
             * 我们会把文件流全部注入到这个文件中
             * 这里的文件你可以自定义是.rar还是.zip*/
            File file = new
File("c:/certpics.rar");
            if
(!file.exists()){   
               
file.createNewFile();   
            }
           
response.reset();
           
//response.getWriter()
            //创建文件输出流
           
FileOutputStream fous = new FileOutputStream(file);   
            /**打包的方法我们会用到ZipOutputStream这样一个输出流,
             * 所以这里我们把输出流转换一下*/
           ZipOutputStream
zipOut 
            = new
ZipOutputStream(fous);
            /**这个方法接受的就是一个所要打包文件的集合,
             * 还有一个ZipOutputStream*/
           zipFile(files,
zipOut);
           
zipOut.close();
           
fous.close();
           return
downloadZip(file,response);
        }catch (Exception e) {
               
e.printStackTrace();
            }
            /**直到文件的打包已经成功了,
             * 文件的打包过程被我封装在FileUtil.zipFile这个静态方法中,
             * 稍后会呈现出来,接下来的就是往客户端写数据了*/
           
     
        return response ;
    }

/**
     * 把接受的全部文件打成压缩包 
     * @param List<File>;  
     * @param
org.apache.tools.zip.ZipOutputStream  
     */
    public static void zipFile
            (List
files,ZipOutputStream outputStream) {
        int size = files.size();
        for(int i = 0; i < size; i++) {
            File file = (File)
files.get(i);
            zipFile(file,
outputStream);
        }
    }

public static HttpServletResponse downloadZip(File file,HttpServletResponse
response) {
        try {
        // 以流的形式下载文件。
        InputStream fis = new
BufferedInputStream(new FileInputStream(file.getPath()));
        byte[] buffer = new
byte[fis.available()];
        fis.read(buffer);
        fis.close();
        // 清空response
        response.reset();

OutputStream toClient = new
BufferedOutputStream(response.getOutputStream());
       
response.setContentType("application/octet-stream");

//如果输出的是中文名的文件,在此处就要用URLEncoder.encode方法进行处理
       
response.setHeader("Content-Disposition",
"attachment;filename=" +URLEncoder.encode(file.getName(),
"UTF-8"));
       
toClient.write(buffer);
       
toClient.flush();
       
toClient.close();
       
} catch (IOException ex) {
       
ex.printStackTrace();
       
}finally{
       
     try {
   
           
    File f = new File(file.getPath());
   
           
    f.delete();
       
        } catch (Exception e) {
       
            e.printStackTrace();
       
        }
       
}
       
return response;
    }

/**  
     * 根据输入的文件与输出流对文件进行打包
     * @param File
     * @param org.apache.tools.zip.ZipOutputStream
     */
    public static void zipFile(File inputFile,
            ZipOutputStream
ouputStream) {
        try {
            if(inputFile.exists())
{
                /**如果是目录的话这里是不采取操作的,
               
 * 至于目录的打包正在研究中*/
                if
(inputFile.isFile()) {
               
    FileInputStream IN = new FileInputStream(inputFile);
               
    BufferedInputStream bins = new BufferedInputStream(IN, 512);
               
    //org.apache.tools.zip.ZipEntry
               
    ZipEntry entry = new ZipEntry(inputFile.getName());
               
    ouputStream.putNextEntry(entry);
               
    // 向压缩文件中输出数据   
               
    int nNumber;
               
    byte[] buffer = new byte[512];
               
    while ((nNumber = bins.read(buffer)) != -1) {
               
        ouputStream.write(buffer, 0, nNumber);
               
    }
                   
// 关闭创建的流对象   
               
    bins.close();
               
    IN.close();
                }
else {
               
    try {
               
        File[] files = inputFile.listFiles();
               
        for (int i = 0; i < files.length; i++)
{
               
            zipFile(files[i],
ouputStream);
               
        }
               
    } catch (Exception e) {
               
        e.printStackTrace();
               
    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

springboot 打包下载数据的更多相关文章

  1. SpringBoot集成<个推推送> Maven 下载jar包异常处理本地打包下载

    问题描述 公司需要对用户进行消息推送,选择了个推,由于是Java进行开发,个推操作文档, 这是官网上安装的方式,可是不成功,无论怎么样都无法把Jar包下载下来! MAVEN方式(本人测试Jar无法下载 ...

  2. SpringBoot整合Druid数据连接池

    SpringBoot整合Druid数据连接池 Druid是什么? Druid是Alibaba开源的的数据库连接池.Druid能够提供强大的监控和扩展功能. 在哪里下载druid maven中央仓库: ...

  3. 2014年最新720多套Android源码2.0GB免费一次性打包下载

    之前发过一个帖子,但是那个帖子有点问题我就重新发一个吧,下面的源码是我从今年3月份开始不断整理源码区和其他网站上的android源码,目前总共有720套左右,根据实现的功能被我分成了100多个类,总共 ...

  4. 开源 & 免费使用 & 打包下载自行部署 :升讯威 周报系统

    这个周报系统大约写于2015年,缘起当时所带的开发团队需要逐步建立或完善一些项目管理方法. 在调研了网上的诸多项目管理或周报/日报管理系统之后,并没有找到符合当时情况的系统,这里最大的问题不是网上既有 ...

  5. PHP实现zip压缩打包下载

    先来看PHP实现文件及文件夹的zip压缩 这里使用PHP扩展的ZipArchive类,在使用之前要将php.ini文件中的zlib.output_compression设置为On 代码如下: publ ...

  6. Android之友盟多渠道打包与数据统计

    文章大纲 一.多渠道打包与数据统计介绍二.友盟实现多渠道打包实战三.友盟数据统计实战四.项目源码下载五.参考文章   一.多渠道打包与数据统计介绍   多渠道打包,相信很多同学都知道.在Android ...

  7. js证书批量生成与打包下载

    前边有提到最近的一个证书生成保存下载打印的需求. 之前实现的是一个单个操作的页面,现在把实现的批量效果和进度效果的代码展示出来. html <button class="btn btn ...

  8. python 打包下载 zipfile & tarfile

    看百度网盘我们会发现这么一个需求,新建一个文件夹,然后向文件夹中上传文件,点击文件夹可以直接下载,下载的是一个压缩文件,将文件夹中所有文件全部打包了下载下来. 在python中,我们要做文件打包下载, ...

  9. JavaWeb多文件上传及zip打包下载

    项目中经常会使用到文件上传及下载的功能.本篇文章总结场景在JavaWeb环境下,多文件上传及批量打包下载功能,包括前台及后台部分.  首先明确一点:  无法通过页面的无刷新ajax请求,直接发下载.上 ...

随机推荐

  1. 【ACM】nyoj_2_括号配对问题_201308091548

    括号配对问题时间限制:3000 ms  |  内存限制:65535 KB 难度:3描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100),表示 ...

  2. mongodb--入门知识点

    命令 mongo.exe,命令行客户端Shell工具. mongod.exe,数据库服务程序. mongodump.exe,数据库备份程序. mongoexport.exe,数据导出工具. mongo ...

  3. HDU 1599

    裸的FLOYD 求最小环. #include <iostream> #include <cstdio> using namespace std; ; ; int n,m,min ...

  4. 【slighttpd】基于lighttpd架构的Server项目实战(6)—预备知识之Http

    接下来,我们開始http部分的开发. 在此之前.有必要先学习一下HTTP协议- http1.1 的rfc文档:http://www.ietf.org/rfc/rfc2616.txt 简单介绍 超文本传 ...

  5. 关于IFeatureSelection的SelectFeatures方法

    近期做项目时用到IFeatureLayer as IFeatureSelection,然后使用IFeatureSelection.SelectFeatures方法.可是得到的IFeatureSelec ...

  6. mysql配置文件夹错误:在安装mysql 5.6.19 时运行cmake命令是出现CMake Error: The source directory does not appear to contai

    在安装mysql 5.5.xx 时运行cmake命令是出现CMake Error: The source directory does not appear to contain CMakeLists ...

  7. 计算工作日之后N天的日期

    1.假期实体类: package com.smics.date; import java.io.Serializable; import java.util.Date; public class Va ...

  8. Linux下用ImageMagick玩图像魔术【转】

    本文转载自:http://www.linuxdiyf.com/linux/11680.html 不管你知不知道,现在是一个用ImageMagick的好机会,至少,如果你是一个Linux用户的话.这是一 ...

  9. Razor Intro

    http://www.w3schools.com/aspnet/razor_intro.asp Razor is not a programming language. It's a server s ...

  10. Arduino-1602-LiquidCrystal库

    前言:LiquidCrystal是一个1602的IIC库,使用IIC协议可以极大节约用线数量,十分方便.当然,前提是1602要使用LCD1602 I2C模块. 一.库函数快速查询 LiquidCrys ...