SpringBoot動態(tài)生成多個Excel文件以壓縮包.zip格式下載

前言

文件下載的場景很多(還不是需求豐富嘛~)蜜氨,那么什么是動態(tài)生成文件呢催享,就是用戶選擇文件內容傅寡,服務器端根據選擇的數(shù)據生成某個格式的文件然后下載到客戶端。單個碼直接下載骂倘,多個打包下載咯眼滤!

項目場景

項目中有個數(shù)據導出excel的需求巴席,而且是批量历涝,那么就要打包咯

解決步驟

基本實現(xiàn)如下:

生成文件
保存到臨時目錄 || 緩存到內存中
將文件打包下載
我不想廢話了,上代碼:

直接把文件輸出流放到壓縮流ZipOutputStream

 List<String> fields = new ArrayList<>();
        fields.add("字段1");
        fields.add("字段2");
        fields.add("字段3");
        HSSFWorkbook workbook = excelUtil.getNewExcel("壓縮文件測試", fields);
        try {
            response.setContentType("application/zip; charset=UTF-8");
            //返回客戶端瀏覽器的版本號漾唉、類型
            String agent = request.getHeader("USER-AGENT");
            String downloadName = "壓縮文件測試.zip";
            //針對IE或者以IE為內核的瀏覽器:
            if (agent.contains("MSIE") || agent.contains("Trident")) {
                downloadName = java.net.URLEncoder.encode(downloadName, "UTF-8");
            } else {
                downloadName = new String(downloadName.getBytes("UTF-8"), "ISO-8859-1");
            }
            response.setHeader("Content-disposition", "attachment;filename=" + downloadName);

            ZipOutputStream zipOutputStream = new ZipOutputStream(response.getOutputStream());
   //多個從這里就可遍歷了
   // --start
            ZipEntry entry = new ZipEntry("第一個文件名.xls");
            zipOutputStream.putNextEntry(entry);

            ByteOutputStream byteOutputStream = new ByteOutputStream();
            workbook.write(byteOutputStream);
            byteOutputStream.writeTo(zipOutputStream);
//            zipOutputStream.write(workbook.getBytes());
            byteOutputStream.close();
            zipOutputStream.closeEntry();
            // --end
            zipOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

生成excel文件也貼一下荧库,如下:

public static HSSFWorkbook getNewExcel(String formName, List<String> fields) {
        //新建excel對象
        HSSFWorkbook workbook = new HSSFWorkbook();
        //新建工作表
        HSSFSheet sheet = workbook.createSheet(formName);
        // 設置表格默認列寬度為20個字節(jié)
        sheet.setDefaultColumnWidth((short) 20);
        // 生成一個樣式
        HSSFCellStyle style = workbook.createCellStyle();
        // 生成一個字體
        HSSFFont font = workbook.createFont();
        font.setFontHeightInPoints((short) 12);
        //字體應用到當前樣式
        style.setFont(font);
        //創(chuàng)建表格行
        HSSFRow row = sheet.createRow(0);
        //設置表單名稱
        row.createCell(0).setCellValue(formName);
        if (fields.size() - 1 > 0) {
            //合并單元格
            sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, fields.size() - 1));
        }
        HSSFRow row1 = sheet.createRow(sheet.getLastRowNum() + 1);
        //設置列標題行
        for (int i = 0; i < fields.size(); i++) {
            row1.createCell(i).setCellValue(fields.get(i));
        }
        return workbook;
    }

一些實踐總結,歡迎指正赵刑!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末分衫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子般此,更是在濱河造成了極大的恐慌蚪战,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铐懊,死亡現(xiàn)場離奇詭異邀桑,居然都是意外死亡,警方通過查閱死者的電腦和手機科乎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門壁畸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人茅茂,你說我怎么就攤上這事捏萍。” “怎么了空闲?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵令杈,是天一觀的道長。 經常有香客問我碴倾,道長逗噩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任影斑,我火速辦了婚禮给赞,結果婚禮上,老公的妹妹穿的比我還像新娘矫户。我一直安慰自己片迅,他們只是感情好,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布皆辽。 她就那樣靜靜地躺著柑蛇,像睡著了一般芥挣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上耻台,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天空免,我揣著相機與錄音,去河邊找鬼盆耽。 笑死蹋砚,一個胖子當著我的面吹牛,可吹牛的內容都是我干的摄杂。 我是一名探鬼主播坝咐,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼析恢!你這毒婦竟也來了墨坚?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤映挂,失蹤者是張志新(化名)和其女友劉穎泽篮,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柑船,經...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡帽撑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了椎组。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片油狂。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖寸癌,靈堂內的尸體忽然破棺而出专筷,到底是詐尸還是另有隱情,我是刑警寧澤蒸苇,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布磷蛹,位于F島的核電站,受9級特大地震影響溪烤,放射性物質發(fā)生泄漏味咳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一檬嘀、第九天 我趴在偏房一處隱蔽的房頂上張望槽驶。 院中可真熱鬧,春花似錦鸳兽、人聲如沸掂铐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽全陨。三九已至爆班,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辱姨,已是汗流浹背柿菩。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留雨涛,地道東北人枢舶。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像镜悉,于是被迫代替她去往敵國和親祟辟。 傳聞我的和親對象是個殘疾皇子医瘫,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355