国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用hutool工具,對多文件下載進(jìn)行打包下載,這里使用的是zip壓縮算法。

這篇具有很好參考價值的文章主要介紹了使用hutool工具,對多文件下載進(jìn)行打包下載,這里使用的是zip壓縮算法。。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

參考以下博主:

Java實(shí)現(xiàn)文件下載zip包單文件等_java下載zip文件_liu.kai的博客-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-759255.html

1、核心步驟

  • 先將需要壓縮的文件們打包在一塊生成一個臨時壓縮包
  • 將這個臨時的壓縮包,以單文件下載的方式,給前端響應(yīng)過去
  • 刪除臨時的壓縮包

2、代碼

package mrkay.show.utils;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.FileTypeUtil;
import cn.hutool.core.util.ZipUtil;
import lombok.extern.slf4j.Slf4j;

import javax.activation.MimetypesFileTypeMap;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.List;

/**
 * 自定義 (zip壓縮包/文件) 操作工具類
 *
 * @author liukai
 * @date 2022/7/14
 */
@Slf4j
@SuppressWarnings("all")
public class ZipFileUtils {


    /**
     * 生成Zip壓縮包 (注意是對hutool的二次封裝,所以必須要有hutool依賴)
     *
     * @param targetZipFile 要生成的目標(biāo)zip壓縮包
     * @param sourceFiles   壓縮包中包含的文件集合
     * @param dirWithFlag   是否將文件目錄一同打包進(jìn)去 (true:壓縮包中包含文件目錄,false:壓縮包中不包含目錄)
     * @author liukai
     */
    public static void generateZip(File targetZipFile, List<File> sourceFiles, boolean dirWithFlag) {
        if (CollUtil.isNotEmpty(sourceFiles)) {
            File[] fileArr = sourceFiles.toArray(new File[]{});
            ZipUtil.zip(targetZipFile, dirWithFlag, fileArr);
        }
    }

    /**
     * 下載ZIP壓縮包(會對下載后的壓縮包進(jìn)行刪除)
     *
     * @param file     zip壓縮包文件
     * @param response 響應(yīng)
     * @author liukai
     */
    public static void downloadZip(File file, HttpServletResponse response) {
        OutputStream toClient = null;
        try {
            // 以流的形式下載文件。
            BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file.getPath()));
            byte[] buffer = new byte[fis.available()];
            fis.read(buffer);
            fis.close();
            // 清空response
            response.reset();
            toClient = new BufferedOutputStream(response.getOutputStream());
            response.setCharacterEncoding("UTF-8");
            response.setContentType("application/octet-stream");
            response.setHeader("Content-Disposition", "attachment;filename=" + file.getName());
            toClient.write(buffer);
            toClient.flush();
        } catch (Exception e) {
            log.error("下載zip壓縮包過程發(fā)生異常:", e);
        } finally {
            if (toClient != null) {
                try {
                    toClient.close();
                } catch (IOException e) {
                    log.error("zip包下載關(guān)流失敗:", e);
                }
            }
            //刪除改臨時zip包(此zip包任何時候都不需要保留,因?yàn)樵次募S時可以再次進(jìn)行壓縮生成zip包)
            file.delete();
        }
    }

    /**
     * 任何單文件下載
     *
     * @param file     要下載的文件
     * @param response 響應(yīng)
     * @author liukai
     */
    public static void downloadAnyFile(File file, HttpServletResponse response) {
        FileInputStream fileInputStream = null;
        OutputStream outputStream = null;
        try {
            fileInputStream = new FileInputStream(file);
            // 清空response
            response.reset();
            //防止文件名中文亂碼
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(file.getName(),"UTF-8"));
            //根據(jù)文件動態(tài)setContentType
            response.setContentType(new MimetypesFileTypeMap().getContentType(file) + ";charset=UTF-8");
            outputStream = response.getOutputStream();
            byte[] bytes = new byte[2048];
            int len;
            while ((len = fileInputStream.read(bytes)) > 0) {
                outputStream.write(bytes, 0, len);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (outputStream != null) {
                try {
                    outputStream.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            if (fileInputStream != null) {
                try {
                    fileInputStream.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
        }
    }
}

到了這里,關(guān)于使用hutool工具,對多文件下載進(jìn)行打包下載,這里使用的是zip壓縮算法。的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • vue使用文件流進(jìn)行下載

    在 Vue 項(xiàng)目中,經(jīng)常會遇到下載文件流的情況,使用?new Blob二進(jìn)制進(jìn)行文件下載功能(vue后臺返回文件流下載導(dǎo)出函數(shù)封裝、調(diào)用示例),type不同下載的文件格式也不同, 這邊本文章下載的是xlsx文件 ,可根據(jù)自己項(xiàng)目場景更換 new Blob() 的 type 即可 這邊帶大家如何封裝使用

    2024年02月16日
    瀏覽(20)
  • 使用javaAPI對HDFS進(jìn)行文件上傳,下載,新建文件及文件夾刪除,遍歷所有文件

    目錄 //通過工具類來操作hdfs ? hdfs dfs -put d:user_info.txt ?/user_info.txt? // 將文件放入到hdfs中 ?2.通過工具類來操作hdfs ? hdfs dfs -get hdfs路徑 ? 本地路經(jīng)? 將文件放入到本地Windows中 3.通過工具類來操作hdfs ? hdfs dfs -mkdir -p ?hdfs路徑 4.通過工具類來操作hdfs ?查看一個文件是否存在

    2024年02月12日
    瀏覽(23)
  • Linux中使用SCP命令進(jìn)行上傳或者下載文件

    SCP(Secure Copy Protocol)是一種基于SSH的在網(wǎng)絡(luò)上安全傳輸文件的文件傳輸協(xié)議,使用SSH(Secure Shell)加密技術(shù)來保證數(shù)據(jù)在傳輸過程中的安全性。SCP 命令是Linux主機(jī)之間進(jìn)行上傳或者下載文件的最常用的命令,這是一個功能非常強(qiáng)大的工具,可以在任意二個主機(jī)之間快速的上傳與

    2024年02月16日
    瀏覽(29)
  • linux系統(tǒng)使用命令rz、sz進(jìn)行文件的上傳、下載

    ? 目錄 1、安裝: 2、使用rz上傳文件 第三步:使用sz下載文件 使用 tar 壓縮當(dāng)前文件夾下所有文件 : rz :本地上傳文件 sz :Linux服務(wù)器上的文件下載到本地。 用法:在linux中直接輸入 rz 然后回車 用法:sz 路徑文件名 下載多個文件: sz 文件1 文件2? 無法下載的文件夾,先進(jìn)

    2024年02月05日
    瀏覽(31)
  • 使用Java API對HDFS進(jìn)行如下操作:文件的創(chuàng)建、上傳、下載以及刪除等操作

    使用Java API對HDFS進(jìn)行如下操作:文件的創(chuàng)建、上傳、下載以及刪除等操作

    HDFS-JAVA接口:上傳文件 將一個本地文件(無具體要求)上傳至HDFS中的/hdfs-test路徑下(如無此路徑,新建一個)。 新建路徑: ? 首先在路徑/usr/test/ 下新建test.txt,指令為:/usr/test/test.txt,然后進(jìn)行上傳操作。 ? ? ?2.HDFS-JAVA接口:創(chuàng)建文件 在HDFS中的/hdfs-test路徑下新建一個da

    2024年02月07日
    瀏覽(29)
  • 使用element-ui的el-upload進(jìn)行excel文件上傳與下載

    使用element-ui的el-upload進(jìn)行excel文件上傳與下載

    需求:前端上傳文件后,后端接受文件進(jìn)行處理后直接返回處理后的文件,前端直接再將文件下載下來。 通常我們都是直接使用el-upload的action屬性來直接完成文件上傳的操作,如果要進(jìn)行后續(xù)文件的直接下載,可以在on-success中用代碼進(jìn)行操作,若存在401權(quán)限問題也可以直接

    2024年02月11日
    瀏覽(37)
  • Java 中,使用 HttpServletResponse 對象將服務(wù)器上的文件響應(yīng)到客戶端瀏覽器進(jìn)行下載

    在服務(wù)器端,使用 FileInputStream 打開要下載的文件,并將其讀取到字節(jié)數(shù)組中。 2.設(shè)置 HttpServletResponse 的響應(yīng)頭信息,告訴瀏覽器需要下載文件,并指定文件名和文件類型 其中,Content-Type 表示響應(yīng)內(nèi)容的類型,這里設(shè)置為 application/octet-stream,表示二進(jìn)制流。Content-Length 表示

    2024年02月13日
    瀏覽(27)
  • ONNX:C++通過onnxruntime使用.onnx模型進(jìn)行前向計(jì)算【下載的onnxruntime是編譯好的庫文件,可直接使用】

    ONNX:C++通過onnxruntime使用.onnx模型進(jìn)行前向計(jì)算【下載的onnxruntime是編譯好的庫文件,可直接使用】

    微軟聯(lián)合Facebook等在2017年搞了個深度學(xué)習(xí)以及機(jī)器學(xué)習(xí)模型的格式標(biāo)準(zhǔn)–ONNX,旨在將所有模型格式統(tǒng)一為一致,更方便地實(shí)現(xiàn)模型部署?,F(xiàn)在大多數(shù)的深度學(xué)習(xí)框架都支持ONNX模型轉(zhuǎn)出并提供相應(yīng)的導(dǎo)出接口。 ONNXRuntime(Open Neural Network Exchange)是微軟推出的一款針對ONNX模型格式

    2024年02月15日
    瀏覽(18)
  • 前端處理后端返回的文件流,進(jìn)行文件下載

    前端處理后端返回的文件流,進(jìn)行文件下載

    二進(jìn)制流格式 ?Blob格式 前言: ? ? ? ? 需求:根據(jù)后端接口返回的文件流進(jìn)行數(shù)據(jù)處理,并實(shí)現(xiàn)文件的下載,且下載文件為word文檔. 封裝下載文件接口: 最開始沒帶 responseType:\\\"Blob\\\" ,進(jìn)行文件下載后,里面的內(nèi)容全部是亂碼?。?! 代碼實(shí)現(xiàn): ?知識點(diǎn)補(bǔ)充: ? ? ? ? 1、n

    2024年02月07日
    瀏覽(93)
  • JAVA使用POI對Word docx模板文件替換數(shù)據(jù)工具類并通過瀏覽器下載到本地

    JAVA使用POI對Word docx模板文件替換數(shù)據(jù)工具類并通過瀏覽器下載到本地

    需求:需要上傳一個帶有占位符的模板至數(shù)據(jù)庫保存,然后解析模板的占位符,通過類計(jì)算結(jié)果替換模板中的占位符,并且保存至本地 難點(diǎn):1.由于我數(shù)據(jù)庫保存是本地保存,并沒有path 所以獲取模板的path是個難點(diǎn) 2.如何使用計(jì)算類,由于我的類是和占位符綁定的,什么樣的

    2024年02月16日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包