博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
打包zip下载
阅读量:6292 次
发布时间:2019-06-22

本文共 2838 字,大约阅读时间需要 9 分钟。

//首先引入的文件为org.apache的切记不是jdk的 import org.apache.tools.zip.ZipOutputStream; import org.apache.tools.zip.ZipEntry;

zip压缩要用到包apache-ant-zip-2.3.jar

下载地址

/**     * 将文件打包下载     * @param path  路径     * @param request      * @param response     * @throws IOException     * @throws InstantiationException     * @throws IllegalAccessException     * @throws IllegalArgumentException     * @throws InvocationTargetException     * @throws NoSuchMethodException     * @throws SecurityException     */    @RequestMapping(value="/getZipByPath",method={RequestMethod.GET, RequestMethod.POST})    public void getZipByPath(String path,HttpServletRequest request,HttpServletResponse response) throws IOException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException{        logger.info("-> getZipByPath()");        ByteArrayOutputStream byteos = new ByteArrayOutputStream();   //将压缩文件暂存到此流中        ZipOutputStream out = new ZipOutputStream(byteos);    //封装字节流        out.setEncoding("gbk");    //解决文件名乱码问题        BufferedOutputStream bos = new BufferedOutputStream(out);    //创建缓冲输出流        path = request.getServletContext().getRealPath("declare_attached"+File.separator+path);    //根据webroot下面文件路径得到绝对路径        File sourceFile = new File(path);    //源文件(文件或文件夹)        if (sourceFile==null) {            logger.info("-> "+path+"文件已不存在");            return;        }        service.getZipByPath(out,bos,sourceFile,sourceFile.getName());        //bos.close();    //关闭这个会报流被关闭的错误,不知道为啥        out.close();            byteos.close();        //输出        response.reset();        response.setContentType("application/zip; charset=utf-8");    //告诉浏览器是zip格式,字节编码为utf-8        response.setHeader("Content-Disposition","attachment;Filename="+sourceFile.getName()+CommonTool.getNowDateStr3()+".zip");   //附件名        byteos.writeTo(response.getOutputStream());    //把字节流里面的东西写到response的输出流里面去        response.getOutputStream().flush();        }

方法

/**     * 打包zip下载     * @param out     * @param bos     * @param sourceFile 源文件     * @param base 文件名     * @throws IOException     */    @Transactional(propagation = Propagation.NOT_SUPPORTED, isolation = Isolation.DEFAULT)    public void getZipByPath(ZipOutputStream out,BufferedOutputStream bos,File sourceFile,String base) throws IOException{        //如果路径为目录(文件夹)        if(sourceFile.isDirectory())        {            //取出文件夹中的文件(或子文件夹)            File[] flist = sourceFile.listFiles();            if(flist.length==0)//如果文件夹为空,则只需在目的地zip文件中写入一个目录进入点            {                out.putNextEntry(  new ZipEntry(base+"/") );//只要有文件就可以,文件夹没有内容            }            else//如果文件夹不为空,则递归调用compress,文件夹中的每一个文件(或文件夹)进行压缩            {                for(int i=0;i

然后前端用a的href请求即可

转载于:https://www.cnblogs.com/aeolian/p/7714662.html

你可能感兴趣的文章
浅谈MySQL 数据库性能优化
查看>>
《UNIX/Linux 系统管理技术手册(第四版)》——1.10 其他的权威文档
查看>>
灵动空间 创享生活
查看>>
《UNIX网络编程 卷1:套接字联网API(第3版)》——8.6 UDP回射客户程序:dg_cli函数...
查看>>
不要将时间浪费到编写完美代码上
查看>>
《算法基础:打开算法之门》一3.4 归并排序
查看>>
高德开放平台开放源代码 鼓励开发者创新
查看>>
《高并发Oracle数据库系统的架构与设计》一2.5 索引维护
查看>>
Firefox 是 Pwn2own 2014 上攻陷次数最多的浏览器
查看>>
阿里感悟(十八)- 应届生Review
查看>>
话说模式匹配(5) for表达式中的模式匹配
查看>>
《锋利的SQL(第2版)》——1.7 常用函数
查看>>
jquery中hover()的用法。简单粗暴
查看>>
线程管理(六)等待线程的终结
查看>>
spring boot集成mongodb最简单版
查看>>
DELL EqualLogic PS存储数据恢复全过程整理
查看>>
《Node.js入门经典》一2.3 安装模块
查看>>
《Java 开发从入门到精通》—— 2.5 技术解惑
查看>>
Linux 性能诊断 perf使用指南
查看>>
实操分享:看看小白我如何第一次搭建阿里云windows服务器(Tomcat+Mysql)
查看>>