springboot 打包下载数据
//文件打包下载
    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 打包下载数据的更多相关文章
- SpringBoot集成<个推推送> Maven 下载jar包异常处理本地打包下载
		问题描述 公司需要对用户进行消息推送,选择了个推,由于是Java进行开发,个推操作文档, 这是官网上安装的方式,可是不成功,无论怎么样都无法把Jar包下载下来! MAVEN方式(本人测试Jar无法下载 ... 
- SpringBoot整合Druid数据连接池
		SpringBoot整合Druid数据连接池 Druid是什么? Druid是Alibaba开源的的数据库连接池.Druid能够提供强大的监控和扩展功能. 在哪里下载druid maven中央仓库: ... 
- 2014年最新720多套Android源码2.0GB免费一次性打包下载
		之前发过一个帖子,但是那个帖子有点问题我就重新发一个吧,下面的源码是我从今年3月份开始不断整理源码区和其他网站上的android源码,目前总共有720套左右,根据实现的功能被我分成了100多个类,总共 ... 
- 开源 & 免费使用 & 打包下载自行部署 :升讯威 周报系统
		这个周报系统大约写于2015年,缘起当时所带的开发团队需要逐步建立或完善一些项目管理方法. 在调研了网上的诸多项目管理或周报/日报管理系统之后,并没有找到符合当时情况的系统,这里最大的问题不是网上既有 ... 
- PHP实现zip压缩打包下载
		先来看PHP实现文件及文件夹的zip压缩 这里使用PHP扩展的ZipArchive类,在使用之前要将php.ini文件中的zlib.output_compression设置为On 代码如下: publ ... 
- Android之友盟多渠道打包与数据统计
		文章大纲 一.多渠道打包与数据统计介绍二.友盟实现多渠道打包实战三.友盟数据统计实战四.项目源码下载五.参考文章 一.多渠道打包与数据统计介绍 多渠道打包,相信很多同学都知道.在Android ... 
- js证书批量生成与打包下载
		前边有提到最近的一个证书生成保存下载打印的需求. 之前实现的是一个单个操作的页面,现在把实现的批量效果和进度效果的代码展示出来. html <button class="btn btn ... 
- python 打包下载 zipfile & tarfile
		看百度网盘我们会发现这么一个需求,新建一个文件夹,然后向文件夹中上传文件,点击文件夹可以直接下载,下载的是一个压缩文件,将文件夹中所有文件全部打包了下载下来. 在python中,我们要做文件打包下载, ... 
- JavaWeb多文件上传及zip打包下载
		项目中经常会使用到文件上传及下载的功能.本篇文章总结场景在JavaWeb环境下,多文件上传及批量打包下载功能,包括前台及后台部分. 首先明确一点: 无法通过页面的无刷新ajax请求,直接发下载.上 ... 
随机推荐
- SpringMVC实战(三种映射处理器)
			1.前言 上一篇博客,简单的介绍了一下SpringMVC的基础知识,这篇博客来说一下SpringMVC中的几种映射处理器机制. 2.三种映射处理器 2.1 BeanNameUrlHandlerMapp ... 
- luogu3911 最小公倍数之和
			题目大意 给出一些数\(A_1,A_2,\cdots A_n\),求 \[\sum_{i=1}^{n}\sum_{j=1}^{n}\mathrm{lcm}(A_i,A_j)\] \(A_i,A_n\l ... 
- luogu2054 洗牌 同余方程
			题目大意 对于扑克牌的一次洗牌是这样定义的,将一叠N(N为偶数)张扑克牌平均分成上下两叠,取下面一叠的第一张作为新的一叠的第一张,然后取上面一叠的第一张作为新的一叠的第二张,再取下面一叠的第二张作为新 ... 
- JS遮罩层
			<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ... 
- bzoj1081: [SCOI2005]超级格雷码(dfs)
			1081: [SCOI2005]超级格雷码 题目:传送门 题解: 又是一道水题... 因为之前做过所以知道规律: 如n=2 B=3: 00 10 20 21 11 01 02 12 22 ... 
- Swift - 将Data数据转换为[UInt8](bytes字节数组)
			有时上传或者发送图片.文字时,需要将数据转换为 bytes 字节数组.下面介绍两种将 Data 转换为 [UInt8] 的方法. 假设我们有如下 Data 数据要转换: 1 let data = &q ... 
- 2017-3-12 leetcode 167 209 216
			---恢复内容开始--- 对于每次开机avast喊出的“已经检测到危害”实在忍无可忍了(它只能检测到不能根除很气..)于是重装了系统,回到了win10感觉不赖. =================== ... 
- k8s 安装并试用Istio service mesh
			本文根据官网的文档整理而成,步骤包括安装istio 0.5.1并创建一个bookinfo的微服务来测试istio的功能. 文中使用的yaml文件可以在kubernetes-handbook的manif ... 
- Hdu-6252 2017CCPC-Final J.Subway Chasing 差分约束
			题面 题意:有2个人,都去坐地铁,但是他们相差了X分钟,但是他们也一直在通讯,于是你就知道,你在AB站点中间的时候,他在CD中间,(B一定等于A+1或者A,同理D也是),问你每2个站之间需要的时间的一 ... 
- mysql视图,索引和存储过程
			一:视图 视图又叫虚表.同真实的表一样,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储的数据值集形式存在.行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成. 具体 ... 
