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

Java純代碼實(shí)現(xiàn)導(dǎo)出文件為壓縮包

 更新時(shí)間:2024年02月05日 08:41:57   作者:Xiao5xiao122  
這篇文章主要為大家詳細(xì)介紹了Java如何代碼實(shí)現(xiàn)導(dǎo)出文件為壓縮包,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

今天做需求突然看到之前產(chǎn)品提的需求,導(dǎo)出多個(gè)文件為壓縮包。功能部分早就已經(jīng)完成了,想到還沒有過類似的記錄,今天就記錄下來吧,是記錄也是學(xué)歷,如果有不對的地方還請多多指教。以下貼出的代碼是下載壓縮包的源代碼,我的文件資源是存儲在服務(wù)器根目錄下,表中記錄的文件存儲的絕對路徑,通過路徑反查獲取資源下載,看官可根據(jù)自己項(xiàng)目的情況判斷是否適用你當(dāng)下的需求場景。廢話不多說,直接上代碼:

controller層:

/**
     * 下載壓縮包
     * @param request
     * @param response
     * @param idDTO 傳入文件id
     */
    @SneakyThrows
    @PostMapping("/download-zip")
    @ApiOperation(value = "下載文件為壓縮包")
    public SwaggerAjaxResult downloadFileZip(HttpServletRequest request, HttpServletResponse response, @RequestBody @Valid UpdateFileDTO idDTO){
        return SwaggerAjaxResult.success(inspectionProblemService.downloadFileZip(request,response,idDTO.getId()));
    }

service 層代碼:

/**
     * 下載文件為壓縮包
     *
     * @param request
     * @param response
     * @param id
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public SwaggerAjaxResult downloadFileZip(HttpServletRequest request, HttpServletResponse response, String id) {
        try {
            List<TFile> fileVOList = fileService.lambdaQuery()
                    .eq(TFile::getParentId, id)
                    .eq(TFile::getParentTable, PROBLEM_TABLE_NAME)
                    .eq(TFile::getType, WJXX)
                    .list();
            Assert.notNull(fileVOList, "文件為空!");

            String fileName = super.baseMapper.getFileName(id);
            Assert.notNull(fileName, "文件名不能為空!");
            //創(chuàng)建臨時(shí)路徑,存放壓縮文件
            String zipFilePath = System.getProperty("user.dir") + File.separator + "downloadZip" + File.separator;
            log.info("文件臨時(shí)路徑為:{}", zipFilePath);
            //如果文件不存在創(chuàng)創(chuàng)建新文件
            File zipFile = new File(zipFilePath);
            if (!zipFile.exists()) {
                zipFile.mkdirs();
            }
            //在臨時(shí)文件夾里創(chuàng)建臨時(shí)文件
            String temporaryZipName = zipFilePath + "臨時(shí)存放.zip";
            //如果不存在就新創(chuàng)建一個(gè)
            File zipFiles = new File(temporaryZipName);
            if (!zipFiles.exists()) {
                zipFiles.createNewFile();
            }

            //壓縮輸出流,將臨時(shí)文件輸出流包裝成壓縮流,將所有文件輸出到這里,打成zip包
            ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(temporaryZipName));
            //將文件寫入壓縮包
            for (TFile file : fileVOList) {
                writingFilesToZip(zipFilePath, zipOut, file, request);
            }
            //壓縮完成關(guān)閉壓縮流
            zipOut.close();
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8") + ".zip");
            response.setCharacterEncoding("UTF-8");
            response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
            ServletOutputStream outputStream = response.getOutputStream();
            FileInputStream inputStream = new FileInputStream(temporaryZipName);
            IOUtils.copy(inputStream, outputStream);
            //關(guān)閉輸入流
            inputStream.close();
            //下載完成,刪除臨時(shí)文件
            File file = new File(zipFilePath);

            FileUtils.deleteFile(file);
            log.info("下載zip成功!");
            return SwaggerAjaxResult.success("下載zip成功!");
        } catch (IOException e) {
            e.printStackTrace();
            log.warn("下載zip失敗!{}", e.getMessage());
            return SwaggerAjaxResult.error("下載zip失敗!{}", e.getMessage());
        }
    }
/**
     * @param zipFilePath
     * @param zipOut
     * @param fileVO
     */
    private void writingFilesToZip(String zipFilePath, ZipOutputStream zipOut, TFile fileVO, HttpServletRequest request) throws IOException {
        String savePath = fileVO.getFileLink();
        //通過URL將文件下載至本地
        downLoadFromUrl(savePath, zipFilePath, fileVO.getFileName(), request);
        byte[] buf = new byte[2 * 1024];
        String srcDir = zipFilePath + fileVO.getFileName();
        File sourceFile = new File(srcDir);
        zipOut.putNextEntry(new ZipEntry(fileVO.getFileName()));
        int len;
        FileInputStream in = new FileInputStream(sourceFile);
        while ((len = in.read(buf)) != -1) {
            zipOut.write(buf, 0, len);
        }
        zipOut.closeEntry();
        in.close();

    }
private void downLoadFromUrl(String savePath, String zipFilePath, String fileName, HttpServletRequest request) throws IOException {
        File file1 = new File(savePath);
        byte[] getData = new byte[0];
        try {
            getData = org.apache.commons.io.FileUtils.readFileToByteArray(file1);
        } catch (IOException e) {
            log.warn("文件:{}不能訪問!", savePath);
        }
        //文件保存位置
        File saveDir = new File(zipFilePath);
        if (!saveDir.exists()) {
            saveDir.mkdir();
        }

        File file = new File(saveDir + File.separator + fileName);
        FileOutputStream fos = new FileOutputStream(file);
        fos.write(getData);
        fos.close();
    }

如有不足,請多多指教!

以上就是Java純代碼實(shí)現(xiàn)導(dǎo)出文件為壓縮包的詳細(xì)內(nèi)容,更多關(guān)于Java導(dǎo)出文件為壓縮包的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JAVA實(shí)現(xiàn) SpringMVC方式的微信接入、實(shí)現(xiàn)簡單的自動回復(fù)功能

    JAVA實(shí)現(xiàn) SpringMVC方式的微信接入、實(shí)現(xiàn)簡單的自動回復(fù)功能

    這篇文章主要介紹了JAVA實(shí)現(xiàn) SpringMVC方式的微信接入、實(shí)現(xiàn)簡單的自動回復(fù)功能的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-11-11
  • SpringCloud Alibaba Seata (收藏版)

    SpringCloud Alibaba Seata (收藏版)

    Seata是一款開源的分布式事務(wù)解決方案,致力于在微服務(wù)架構(gòu)在提供高性能和簡單一樣的分布式事務(wù)服務(wù)。這篇文章主要介紹了SpringCloud Alibaba Seata 的相關(guān)知識,需要的朋友可以參考下
    2020-10-10
  • Java中使用COS實(shí)現(xiàn)文件上傳功能

    Java中使用COS實(shí)現(xiàn)文件上傳功能

    cos是O'Rrilly公司開發(fā)的一款用于HTTP上傳文件的OpenSource組件。下面通過本文給大家分享使用COS實(shí)現(xiàn)文件上傳功能,感興趣的朋友一起看看吧
    2017-08-08
  • Java實(shí)現(xiàn)冒泡排序與雙向冒泡排序算法的代碼示例

    Java實(shí)現(xiàn)冒泡排序與雙向冒泡排序算法的代碼示例

    這篇文章主要介紹了Java實(shí)現(xiàn)冒泡排序與雙向冒泡排序算法的代碼示例,值得一提的是所謂的雙向冒泡排序并不比普通的冒泡排序效率來得高,注意相應(yīng)的時(shí)間復(fù)雜度,需要的朋友可以參考下
    2016-04-04
  • 教你用java實(shí)現(xiàn)學(xué)生成績管理系統(tǒng)(附詳細(xì)代碼)

    教你用java實(shí)現(xiàn)學(xué)生成績管理系統(tǒng)(附詳細(xì)代碼)

    教學(xué)管理系統(tǒng)很適合初學(xué)者對于所學(xué)語言的練習(xí),下面這篇文章主要給大家介紹了關(guān)于如何用java實(shí)現(xiàn)學(xué)生成績管理系統(tǒng)的相關(guān)資料,文中給出了詳細(xì)的實(shí)例代碼,需要的朋友可以參考下
    2023-06-06
  • Servlet中/和/*的區(qū)別詳解

    Servlet中/和/*的區(qū)別詳解

    本文將分析/和/*的區(qū)別這個(gè)老生常談的問題,但是很多時(shí)候看完就忘了,關(guān)于此問題這一篇文章就夠了,它將成為你的永久記憶,感興趣的可以了解一下
    2021-07-07
  • Java單鏈表的簡單操作實(shí)現(xiàn)教程

    Java單鏈表的簡單操作實(shí)現(xiàn)教程

    這篇文章主要給大家介紹了關(guān)于Java單鏈表的簡單操作實(shí)現(xiàn)教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Java上傳文件進(jìn)度條的實(shí)現(xiàn)方法(附demo源碼下載)

    Java上傳文件進(jìn)度條的實(shí)現(xiàn)方法(附demo源碼下載)

    這篇文章主要介紹了Java上傳文件進(jìn)度條的實(shí)現(xiàn)方法,可簡單實(shí)現(xiàn)顯示文件上傳比特?cái)?shù)及進(jìn)度的功能,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下
    2015-12-12
  • IDEA2020.2.3中創(chuàng)建JavaWeb工程的完整步驟記錄

    IDEA2020.2.3中創(chuàng)建JavaWeb工程的完整步驟記錄

    這篇文章主要給大家介紹了關(guān)于IDEA2020.2.3中創(chuàng)建JavaWeb工程的完整步驟,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Java與Kotlin互調(diào)原理講解

    Java與Kotlin互調(diào)原理講解

    這篇文章主要介紹了Java與Kotlin互調(diào)原理,分享內(nèi)容有Kt調(diào)用-Java參數(shù)非null的處理、Java中使用kt關(guān)鍵字聲明的變量和方法、Kt調(diào)用Java-SAM轉(zhuǎn)換等內(nèi)容,需要的小伙伴可以參考一下
    2022-02-02

最新評論

陇川县| 尚义县| 余庆县| 雷波县| 庄浪县| 岳西县| 江阴市| 平南县| 蓝田县| 黔西县| 垫江县| 大悟县| 武穴市| 孝义市| 宁武县| 房产| 华阴市| 伊川县| 德州市| 开平市| 乌海市| 太保市| 紫金县| 通城县| 启东市| 中方县| 三亚市| 富平县| 郴州市| 汨罗市| 夏津县| 商都县| 长治市| 柘荣县| 瑞丽市| 滨州市| 松阳县| 宁远县| 岳池县| 陇川县| 合川市|