//文件打包下载
    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. Game with a Strip

    Game with a Strip Time limit: 2.0 secondMemory limit: 64 MB There is a strip 1 × n with two sides. E ...

  2. mongodb--find基础用法

    聚集集合查询 1.查询所有记录 db.userInfo.find(); 相当于:select* from userInfo; 默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数 ...

  3. POJ 2002 Squares【值得摸索的一道二分+点旋转】

    id=2002">Squares 很好的一道二分,事实上本来我是没有思路的,看了基神的题解之后才似乎明确了点. 题意:给出最多有1000个点,问这些点能够组成多少个正方形 分析:先想想 ...

  4. 【转】Unix下C程序内存泄漏检测工具Valgrind安装与使用

    Valgrind是一款用于内存调试.内存泄漏检测以及性能分析的软件开发工具. Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Goo ...

  5. ORACLE NOLOGGING研究

    熟悉oracle的人都知道.通过设置oracle的nologging选项,能够使某些操作高速完毕,风险是数据库备份可能失效.能够使用nologging的操作有非常多,搜集资料整理例如以下: 1.索引的 ...

  6. 问题: Unsupported major.minor version 51.0

    Unsupported major.minor version 51.0 问题原因:外部jar包使用jdk1.7(jdk7)编译,而使用此jar包的工程jdk版本为jdk1.6(jdk6),算是版本不 ...

  7. 【JEECG技术博文】Local storage &amp; easyui extensions

    1. Local storage背景 cookie弊端:同域内http请求都会带cookie,添加带宽和流量:有个数和限制大小(约4K). 在HTML5中,本地存储是一个window的属性.包含loc ...

  8. java,wavToMP3格式转换

    这里须要用到一个jar包:jave-1.0.1.jar,下载地址的话自己百度吧. 废话不多说直接贴代码: import it.sauronsoftware.jave.AudioAttributes; ...

  9. 圆角矩形“RoundRectShape”使用详解

    圆角矩形 常用作一些组件的背景 构造函数: RoundRectShape(float[] outerRadii, RectF inset, float[] innerRadii) Specifies ...

  10. C Tricks(十七)—— 对角线元素的屏蔽、二维数组(矩阵)的遍历

    1. 对角线元素的屏蔽 使用 if + continue 实现对对角线元素的屏蔽 for u in range(n): for v in range(n): if u == v: continue . ...