欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java多文件生成并壓縮下載功能(思路詳解)

 更新時間:2022年02月15日 10:11:14   作者:流蘇打  
這篇文章主要介紹了Java多文件生成并壓縮下載,本文給大家分享兩種思路通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

年前一直忙著項目現(xiàn)場實(shí)施,沒時間整理,今天終于得空開始整理。

做WMS系統(tǒng)經(jīng)常會遇到導(dǎo)出各種類型的庫存單,此時就可以在后臺將這些整合壓縮到一個壓縮包內(nèi)然后再下載壓縮包,一個接口就可以完成的事。

有兩個思路:

思路一:將生成的多個文件先逐個存到本地一個臨時的文件夾內(nèi)并壓縮,獲取壓縮文件下載,下載完以后刪除該臨時文件夾和內(nèi)部文件 思路二:所有都在內(nèi)存中實(shí)現(xiàn),將生成的多個文件的輸出流轉(zhuǎn)換成為byte數(shù)組塞入壓縮包的輸出流中,最后下載該壓縮包

第一個思路雖然操作復(fù)雜,但是卻很容易想到的。

第二個思路,所有文件流都放在內(nèi)存中操作,操作大大的簡便了。本文將要講述的就是此種方式。

controller層:

//思路二:所有都在內(nèi)存中實(shí)現(xiàn),將生成的多個文件的輸出流轉(zhuǎn)換成為byte數(shù)組塞入壓縮包的輸出流中,最后下載該壓縮包
    @RequestMapping("/zip/download2")
    public void downloadZip2(String name, HttpServletResponse httpResponse) {
        documentService.downloadReport(name, httpResponse);
    }

service層:

public void downloadReport(String name, HttpServletResponse httpResponse){
 
        //使用EasyExcel生成excel表1
        Map excelOut = exportExcel(name);
        //使用EasyExcel生成excel表2(同上)
        Map excelOut2 = exportExcel2(name);
        //將要壓縮的文件塞到一個list里面
        List<Map> fileList = new ArrayList();
        fileList.add(excelOut);
        fileList.add(excelOut2);
        //壓縮多個文件并下載
        zipFiles(fileList,httpResponse);
    }

要養(yǎng)成一個良好的習(xí)慣,當(dāng)一個方法中的代碼量過于臃腫時候,要抽出來一部分生成一個新的方法來給調(diào)用。

 //生成excel表格導(dǎo)出到本地
    public Map exportExcel(String name) {
        List<User> userList = userDao.queryUsersByName(name);
        try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
            //使用easyExcel導(dǎo)出excel
            String excelFileName = "根據(jù)人名查詢數(shù)據(jù).xlsx";
            ExcelWriter writer = new ExcelWriter(out, ExcelTypeEnum.XLSX, true);
            Sheet sheet = new Sheet(1, 0, User.class);
            //設(shè)置自適應(yīng)寬度
            sheet.setAutoWidth(Boolean.TRUE);
            writer.write(userList, sheet);
            writer.finish();
            Map excelOut = new HashMap();
            excelOut.put("fileName",excelFileName);
            excelOut.put("outByte",out.toByteArray());
            return excelOut;
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
        return null;
    }
 //多個文件壓縮成壓縮包并下載
    public void zipFiles(List<Map> fileList,HttpServletResponse httpResponse) {
        try(ZipOutputStream zipOutputStream = new ZipOutputStream(httpResponse.getOutputStream()); OutputStream out =null) {
            //下載壓縮包
            httpResponse.setContentType("application/zip");
            httpResponse.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode("附件.zip", "UTF-8"));
            // 創(chuàng)建 ZipEntry 對象
            for (Map map:fileList){
                ZipEntry zipEntry =  new ZipEntry((String) map.get("fileName"));
                zipOutputStream.putNextEntry(zipEntry);
                zipOutputStream.write((byte[]) map.get("outByte"));
            }
        } catch (IOException e) {
            log.error(e.getMessage(), e);
        }
    }

dao層就是簡單的一個sql語句根據(jù)用戶名稱查詢用戶數(shù)據(jù)

如此便完成了多文件壓縮并下載的功能,如下。

當(dāng)然,思路一雖然復(fù)雜,但是對于新手同學(xué)我還是建議把思路一自己實(shí)現(xiàn)一下,其中對于文件IO的一些操作將會讓你更加容易理解并吸收。

到此這篇關(guān)于Java多文件生成并壓縮下載的文章就介紹到這了,更多相關(guān)Java多文件壓縮下載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論