//文件打包下载
    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. Disruptor使用

    Disruptor作者,介绍Disruptor能每秒处理600万订单.这是一个可怕的数字. disruptor之所以那么快,是因为内部采用环形队列和无锁设计.使用cas来进行并发控制.通过获取可用下标 ...

  2. Ubuntu+XAMPP+Wordpress的安装与配置问题

    Wordpress自动更新以及安装在线主题的时候需要输入FTP信息 打开/opt/lampp/htdocs/wordpress/wp-config.php文件 define('FS_METHOD',' ...

  3. [bzoj2186][Sdoi2008]沙拉公主的困惑_数论

    沙拉公主的困惑 bzoj-2186 Sdoi-2008 题目大意:求N!中与M!互质的数的个数. 注释:$1\le N,M\le 10^7$. 想法:显然是求$\phi(M!)$.这东西其实只需要将数 ...

  4. 洛谷 P2399 non hates math

    P2399 non hates math 题目背景 non习惯将分数化成小数,但在数学中要以分数形式写,不能化成小数 因此non找到了会编程的你,帮助他将小数化回分数 题目描述 给出一个小数,将它化成 ...

  5. Maven使用package打包Spring Boot时出现:Unable to find a single main class from the following candidates的问题解决

    问题如下: [ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.3.5.RELEASE ...

  6. 允许远程访问MySQL的设置

    允许远程访问MySQL的设置 学习了:http://www.cnblogs.com/hyzhou/archive/2011/12/06/2278236.html Windows版本有workbench ...

  7. D 分组背包

    <span style="color:#3333ff;">/* ---------------------------------------------------- ...

  8. log4js-Node.js中的日志管理模块使用与封装

    开发过程中,日志记录是不可缺少的事情.尤其是生产系统中常常无法调试,因此日志就成了重要的调试信息来源. Node.js,已经有现成的开源日志模块,就是log4js,源代码地址:点击打开链接 项目引用方 ...

  9. 我的IIS7.5竟然不支持ASP.NET路由

    MVC模式下那些友好,屏蔽具体物理文件的URL让我眼馋,咱也想在WEB FORM项目用上一用. 按照指引,添加global.asax,写上路由代码什么的: <%@ Application Lan ...

  10. Getting started with ASP.NET Core MVC and Visual Studio

    This tutorial will teach you the basics of building an ASP.NET Core MVC web app using Visual Studio ...