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

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

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

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

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

有兩個思路:

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

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

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

controller層:

//思路二:所有都在內(nèi)存中實現(xià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)成一個良好的習慣,當一個方法中的代碼量過于臃腫時候,要抽出來一部分生成一個新的方法來給調(diào)用。

 //生成excel表格導出到本地
    public Map exportExcel(String name) {
        List<User> userList = userDao.queryUsersByName(name);
        try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
            //使用easyExcel導出excel
            String excelFileName = "根據(jù)人名查詢數(shù)據(jù).xlsx";
            ExcelWriter writer = new ExcelWriter(out, ExcelTypeEnum.XLSX, true);
            Sheet sheet = new Sheet(1, 0, User.class);
            //設置自適應寬度
            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ù)

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

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

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

相關文章

最新評論