最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實現(xiàn)文件打包壓縮輸出到瀏覽器下載

 更新時間:2021年11月17日 09:53:51   作者:Java大表哥  
這篇文章主要介紹了java實現(xiàn)文件打包壓縮輸出到瀏覽器下載,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

文件打包壓縮輸出到瀏覽器下載

java批量下載文件打包壓縮工具類,輸出到瀏覽器下載,可以自己改名。

一、工具類:

入?yún)?:文件LIst ;打包后的名字 ;響應(yīng)到瀏覽器

/**
     * 功能:壓縮多個文件,輸出壓縮后的zip文件流
     *
     * @param srcfile:源文件列表
     * @param zipFileName:壓縮后的文件名
     * @param response:           Http響應(yīng)
     */
    public void zipFiles(List<File> srcfile, String zipFileName, HttpServletResponse response) throws IOException {
        byte[] buf = new byte[1024];
        // 獲取輸出流
        BufferedOutputStream bos = null;
        try {
            bos = new BufferedOutputStream(response.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
        FileInputStream in = null;
        ZipOutputStream out = null;
        try {
            response.reset(); // 重點突出
            // 不同類型的文件對應(yīng)不同的MIME類型
            response.setContentType("application/x-msdownload");
            response.setCharacterEncoding("utf-8");
            response.setHeader("Content-disposition", "attachment;filename=" + zipFileName + ".zip");
 
            // ZipOutputStream類:完成文件或文件夾的壓縮
            out = new ZipOutputStream(bos);
            for (int i = 0; i < srcfile.size(); i++) {
                in = new FileInputStream(srcfile.get(i));
                // 給列表中的文件單獨命名
                out.putNextEntry(new ZipEntry(srcfile.get(i).getName()));
                int len = -1;
                while ((len = in.read(buf)) != -1) {
                    out.write(buf, 0, len);
                }
            }
            out.close();
            bos.close();
            log.info("壓縮完成.");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (in != null) in.close();
            if (out != null) out.close();
        }
    }

二、調(diào)用

zipFiles(files, zipName, response);

生成zip文件并瀏覽器導(dǎo)出

總結(jié)一下,關(guān)于Java下載zip文件并導(dǎo)出的方法,瀏覽器導(dǎo)出。

     String downloadName = "下載文件名稱.zip";
        downloadName = BrowserCharCodeUtils.browserCharCodeFun(request, downloadName);//下載文件名亂碼問題解決
        
        //將文件進(jìn)行打包下載
        try {
            OutputStream out = response.getOutputStream();
            byte[] data = createZip("/fileStorage/download");//服務(wù)器存儲地址
            response.reset();
            response.setHeader("Content-Disposition","attachment;fileName="+downloadName);
            response.addHeader("Content-Length", ""+data.length);
            response.setContentType("application/octet-stream;charset=UTF-8");
            IOUtils.write(data, out);
            out.flush();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

獲取下載zip文件流

public byte[] createZip(String srcSource) throws Exception{
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        ZipOutputStream zip = new ZipOutputStream(outputStream);
        //將目標(biāo)文件打包成zip導(dǎo)出
        File file = new File(srcSource); 
        a(zip,file,"");
        IOUtils.closeQuietly(zip);
        return outputStream.toByteArray();
    }
public void a(ZipOutputStream zip, File file, String dir) throws Exception {
            //如果當(dāng)前的是文件夾,則進(jìn)行進(jìn)一步處理
            if (file.isDirectory()) {
                //得到文件列表信息
                File[] files = file.listFiles();
                //將文件夾添加到下一級打包目錄
                zip.putNextEntry(new ZipEntry(dir + "/"));
                dir = dir.length() == 0 ? "" : dir + "/";
                //循環(huán)將文件夾中的文件打包
                for (int i = 0; i < files.length; i++) {
                    a(zip, files[i], dir + files[i].getName());         //遞歸處理
                }
            } else {   //當(dāng)前的是文件,打包處理
                //文件輸入流
               BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
               ZipEntry entry = new ZipEntry(dir);
               zip.putNextEntry(entry);
               zip.write(FileUtils.readFileToByteArray(file));
               IOUtils.closeQuietly(bis);
               zip.flush();
               zip.closeEntry();
            }
    }

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java實現(xiàn)MD5加密的方法小結(jié)

    java實現(xiàn)MD5加密的方法小結(jié)

    這篇文章主要介紹了java實現(xiàn)MD5加密的方法,結(jié)合具體實例形式總結(jié)分析了java實現(xiàn)md5加密的常用操作技巧與使用方法,需要的朋友可以參考下
    2017-10-10
  • spring data jpa分頁查詢示例代碼

    spring data jpa分頁查詢示例代碼

    本篇文章主要介紹了spring data jpa分頁查詢示例代碼,分頁在很多項目中都能使用,具有一定的參考價值,有興趣的可以了解一下。
    2017-03-03
  • 淺析java雙向冒泡排序算法

    淺析java雙向冒泡排序算法

    這篇文章主要介紹了淺析java雙向冒泡排序算法,并附上源碼,需要的朋友可以參考下
    2015-02-02
  • Java Code Cache滿導(dǎo)致應(yīng)用性能降低問題解決

    Java Code Cache滿導(dǎo)致應(yīng)用性能降低問題解決

    這篇文章主要介紹了Java Code Cache滿導(dǎo)致應(yīng)用性能降低問題解決,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • SpringBoot2.7.14整合redis7的詳細(xì)過程

    SpringBoot2.7.14整合redis7的詳細(xì)過程

    這篇文章主要介紹了SpringBoot2.7.14整合redis7的詳細(xì)過程,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-10-10
  • Java8的Optional如何干掉空指針(示例詳解)

    Java8的Optional如何干掉空指針(示例詳解)

    這篇文章主要介紹了Java8的Optional如何干掉空指針,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • 利用Spring Boot創(chuàng)建docker image的完整步驟

    利用Spring Boot創(chuàng)建docker image的完整步驟

    這篇文章主要給大家介紹了關(guān)于如何利用Spring Boot創(chuàng)建docker image的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Java通過Fork/Join優(yōu)化并行計算

    Java通過Fork/Join優(yōu)化并行計算

    這篇文章主要為大家詳細(xì)介紹了Java通過Fork、Join來優(yōu)化并行計算,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • SpringDataMongoDB多文檔事務(wù)的實現(xiàn)

    SpringDataMongoDB多文檔事務(wù)的實現(xiàn)

    mongodb4.0也出來一段時間了,這個版本最為大眾期待的特性就是支持了多文檔事務(wù)。這篇文章主要介紹了SpringDataMongoDB多文檔事務(wù)的實現(xiàn),感興趣的小伙伴們可以參考一下
    2018-11-11
  • Spring容器的創(chuàng)建過程之如何注冊BeanPostProcessor詳解

    Spring容器的創(chuàng)建過程之如何注冊BeanPostProcessor詳解

    關(guān)于BeanPostProcessor 各位一定不陌生,今天整理的這篇文章總結(jié)了如何注冊BeanPostProcessor,文中有非常詳細(xì)的圖文示例,需要的朋友可以參考下
    2021-06-06

最新評論

嘉禾县| 驻马店市| 古丈县| 宜宾市| 吐鲁番市| 万安县| 新龙县| 永丰县| 绵阳市| 玛沁县| 临夏县| 科尔| 阳曲县| 辽阳市| 开化县| 建德市| 延寿县| 丹东市| 怀来县| 广河县| 文成县| 高尔夫| 石棉县| 章丘市| 高雄市| 息烽县| 松潘县| 芦溪县| 南投县| 西林县| 白城市| 峨眉山市| 永春县| 墨竹工卡县| 宜春市| 云梦县| 铜山县| 昂仁县| 武强县| 蓝山县| 安福县|