java如何实现以数据流的形式下载压缩包到本地?

先不多说,直接贴代码吧,在服务器的E盘下放一个E:/manual.rar的压缩包

package com.cellstrain.icell.controller;

import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.*;import java.net.URLEncoder;import java.util.ArrayList;import java.util.List;import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStream;

@Controllerpublic class ManualController {    /**     * 产品手册批量下载(以压缩包的格式)     *     * @param request     * @param response     * @return     * @throws Exception     */    @RequestMapping("downloadManual")    public HttpServletResponse downLoadFiles(HttpServletRequest request, HttpServletResponse response) throws Exception {        try {            File dir = new File("E:\\manual\\");            /**创建一个临时压缩文件,我们会把文件流全部注入到这个文件中,这里的文件你可以自定义是.rar还是.zip**/            File file = new File("E:/manual.rar");            if (!file.exists()) {                file.createNewFile();            }            response.reset();            return downloadZip(file, response);        } catch (Exception e) {            e.printStackTrace();        }        /**直到文件的打包已经成功了,文件的打包过程被我封装在FileUtil.zipFile这个静态方法中,稍后会呈现出来,接下来的就是往客户端写数据了**/        return response;    }

/**     * 以流的形式下载文件     *     * @param file     * @param response     * @return     */    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 inputFile     * @param ouputStream     */    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, 1024);                    //org.apache.tools.zip.ZipEntry                    ZipEntry entry = new ZipEntry(inputFile.getName());                    ouputStream.putNextEntry(entry);                    // 向压缩文件中输出数据                    int nNumber;                    byte[] buffer = new byte[1024];                    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();        }    }}

效果图如下:
可以自己手动选择文件的存放位置,pdf、word、excel等类似
 
时间: 2024-10-06 00:52:41

java如何实现以数据流的形式下载压缩包到本地?的相关文章

java后台简单从腾讯云下载文件通知前端以附件的形式保存

不废话 上代码 // fileName :前台传入的文件名(主要是标识文件是什么格式.png或.zip) // cosKey:上传文件时腾讯云返回的标识 // 配置腾讯云基本信息 String aliyunId = ApplicationPropertyUtils.getContextProperty("TENXUN_ACCESS_KEY_ID"); String aliyunSecret = ApplicationPropertyUtils.getContextProperty(&q

Java Web实现使用浏览器从服务器下载文件(后台)

Java Web实现 使用浏览器从服务器下载文件. 下面实现两种情况的下载,需求如下: 需求(一):1.用户在页面填写表单. 2.填写完成后,选择下载,将表单内容发往后台. 3.后台根据内容生产一个文件,发送给前端. 4.前端成功下载文件到本地. 此需求简单来说就是,用户在页面上填写内容,然后将内容转变成文件的形式. 后台设计思路:1.首先拿到前端发送过来的内容. 2.将内容解析,存放至缓冲区. 3.设置响应头. 4.将缓冲区里的内容,以流的方式写出. 代码实现: public void dow

java常用IO流数据流小结

  类名 常用方法 说明 输入流 InputStream int read(); 只能读字节流,虽然返回值是int,但只有低8位起作用. DataInputStream Type readType(); 可以读二进制流,可以读byte,short,int,long,double等二进制流. BufferedReader String readLine(); 可以读文本行. 输出流 OutputStream void write(int); 只能写字节流,虽然形参是int,但只有低8为起作用. D

Java Swing打猎射击游戏编程代码下载

代码下载地址:http://www.zuidaima.com/share/1858069987494912.htm 原文:Java Swing打猎射击游戏编程代码下载 这是一款java swing编写的打猎射击游戏,从这款游戏的编程中,我们可以练习如何进行射击对象的消失及相关按键的监听. 该游戏的一大亮点还是对运动图片的二级缓冲功能,运行时可以感受到非常的流畅,对于想从事游戏编程的人员来说是必须要掌握的一个技能点. 游戏操作:通过鼠标点击野猪和小鸟来是实现击中功能,子弹不足时提示"装载子弹...

JxBrowser Java浏览器控件详细介绍及下载

JxBrowser能在Windows.Linux.Mac OS X (Intel and PPC-based)平台上将Mozilla Firefox浏览器完美地整合到Java AWT/Swing应用程序里.该库程序使用Gecko设计引擎来转换HTML文档.因而保证了它能与许多Internet标准(如HTML 4.CSS.XML.JavaScript以及其它)兼容. 主要功能 用来将HTML浏览程序内置到AWT/Swing用户界面上的可视浏览器控件 使用Gecko 1.9/Firefox 3代码库

java jsp多用户博客系统源代码下载

原文:java jsp多用户博客系统源代码下载 源代码下载地址:http://www.zuidaima.com/share/1550463407606784.htm java多用户博客系统(MVC),是采用javabean+servlet+jsp技术,同时运用了javascript,css+div,ajax技术.以Mysql数据库,tomcat6为服务器. 官方验证: 项目截图 首页http://localhost:端口/项目/ 注册http://localhost:端口/项目/register

java OA开源办公系统源码下载

原文:java OA开源办公系统源码下载 源代码下载地址:http://www.zuidaima.com/share/1550463681268736.htm 项目截图

java JFreechart开发报表的实例demo下载

原文:java JFreechart开发报表的实例demo下载 源代码下载地址:http://www.zuidaima.com/share/1550463472110592.htm 运行效果图如下: 代码截图:

java Struts+Hibernate企业人力资源管理系统源代码下载

原文:java Struts+Hibernate企业人力资源管理系统源代码下载 源代码下载地址:http://www.zuidaima.com/share/1778471692995584.htm 一个简单的人才管理系统 人力资源管理在管理学中是一个非常重要的领域,通过人力资源管理能够对企业员工进行有效的管理.它的作用已经大大超过了人事管理,正因为如此,这种新型的 管理模式越来越被人们所重视到.有效的人力资源管理是社会各组织.各企业都需要的.在本章将一个Web版的人力资源管理系统,通过该系统对企