日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java實現(xiàn)批量下載(打包成zip)的實現(xiàn)

瀏覽:29日期:2022-08-21 10:52:37

引言

批量下載思路,首先前端發(fā)送下載請求,攜帶必要參數(shù),也可無參默認批量下載頁面全部數(shù)據(jù);后臺接收后進行數(shù)據(jù)處理拿到要下載文件的下載地址,循環(huán)下載地址,用壓縮流,將文件直接寫入壓縮包,最后利用文件下載將壓縮包輸出給前端。

一、前端JS發(fā)送下載請求

1、ajax無法發(fā)送下載請求

關于下載的常見需求無非就是點擊按鈕下載或者選中點擊批量下載,點擊下載或批量下載后,攜帶參數(shù)向后臺發(fā)送下載請求,但是JS中的ajax無法觸發(fā)瀏覽器的下載機制,這也是處于安全考慮,所以下載請求不可以通過發(fā)送ajax請求實現(xiàn)。

2、js發(fā)送下載請求:超鏈接方式

我們可以通過< a >標簽實現(xiàn),在a標簽的href中拼接get請求并攜帶所需參數(shù),如下

<a href='http://localhost:8080/download/?ids=123,234&fileName=down'>下載</a>

批量下載,前端可以傳每條數(shù)據(jù)的id,用逗號拼接成字符串,后臺接收后進行數(shù)據(jù)處理,然后進行批量下載,但是此方式有局限性,如果我選中了很多條數(shù)據(jù),每條數(shù)據(jù)的id都是32位UUID,那get請求無法攜帶大量參數(shù),所以這種方式并不適合批量下載,只適合單條數(shù)據(jù)下載。

3、js發(fā)送下載請求:拼接Form表單,并提交

form表單也有局限性,例如form表單不能傳輸json格式的數(shù)據(jù),也就是說用此方式提交,后臺不能用@RequestBody注解

$(’.download-btn’).click(function () { // 如果要傳選中行的id,則從頁面獲取到所有id,可以拿逗號拼接,放到輸入框傳給后臺 // 如果需要把選中行整行數(shù)據(jù)傳到后臺,form表單不支持傳json格式數(shù)據(jù),所以可以把 // 選中行數(shù)據(jù)放入數(shù)組,轉為json放入輸入框,后臺用String接收,然后再轉回Obj var $dataForm = $( '<form type=’hidden’ method=’post’>' + '<input type=’hidden’ id=’ids’ name=’ids’ value=’' + ids + '’ type=’text’/>' + '</form>' ); $dataForm.attr('action', ’localhost:8080/download’); $(document.body).append($dataForm); //提交表單,實現(xiàn)下載 $dataForm.submit();});

如上邊代碼所示,傳參為ids,那如果你想傳obj,可以用JSON.stringify()將前端對象或數(shù)組類型轉為json字符串,然后賦值給表單的輸入框,一并提交給后臺,后臺用String接收,然后再轉回Object,我在測試過程中 js提交數(shù)據(jù)到后臺(json),' 被轉譯 成了& quot;,如果你也遇到,請看這篇文章:文章鏈接

二、后臺處理

此處省略接收參數(shù),獲取需要下載的文件的url,直接寫死模擬:

@RequestMapping(value = '/download', method = RequestMethod.POST)public void plistDownLoad(HttpServletResponse response) throws Exception { // 此處模擬處理ids,拿到文件下載url List<String> paths = new ArrayList<>(); paths.add('C:UsersE480DesktopStudycasul筆記.txt'); paths.add('C:UsersE480DesktopStudyconfig配置中心筆記.txt'); paths.add('C:UsersE480DesktopStudyGateWay.txt'); if (paths.size() != 0) { // 創(chuàng)建臨時路徑,存放壓縮文件 String zipFilePath = 'D:workspace-IDEAzip我的zip.zip'; // 壓縮輸出流,包裝流,將臨時文件輸出流包裝成壓縮流,將所有文件輸出到這里,打成zip包 ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFilePath)); // 循環(huán)調用壓縮文件方法,將一個一個需要下載的文件打入壓縮文件包 for (String path : paths) { // 該方法在下面定義 fileToZip(path, zipOut); } // 壓縮完成后,關閉壓縮流 zipOut.close(); //拼接下載默認名稱并轉為ISO-8859-1格式 String fileName = new String(('我的壓縮文件.zip').getBytes(),'ISO-8859-1'); response.setHeader('Content-Disposition', 'attchment;filename='+fileName); //該流不可以手動關閉,手動關閉下載會出問題,下載完成后會自動關閉 ServletOutputStream outputStream = response.getOutputStream(); FileInputStream inputStream = new FileInputStream(zipFilePath); // 如果是SpringBoot框架,在這個路徑 // org.apache.tomcat.util.http.fileupload.IOUtils產品 // 否則需要自主引入apache的 commons-io依賴 // copy方法為文件復制,在這里直接實現(xiàn)了下載效果 IOUtils.copy(inputStream, outputStream); // 關閉輸入流 inputStream.close(); //下載完成之后,刪掉這個zip包 File fileTempZip = new File(zipFilePath); fileTempZip.delete(); }}

將文件打包的方法,需要傳一個壓縮路徑,和一個文件,一次只將一個文件寫入壓縮包

public static void fileToZip(String filePath,ZipOutputStream zipOut) throws IOException { // 需要壓縮的文件 File file = new File(filePath); // 獲取文件名稱,如果有特殊命名需求,可以將參數(shù)列表拓展,傳fileName String fileName = file.getName(); FileInputStream fileInput = new FileInputStream(filePath); // 緩沖 byte[] bufferArea = new byte[1024 * 10]; BufferedInputStream bufferStream = new BufferedInputStream(fileInput, 1024 * 10); // 將當前文件作為一個zip實體寫入壓縮流,fileName代表壓縮文件中的文件名稱 zipOut.putNextEntry(new ZipEntry(fileName)); int length = 0; // 最常規(guī)IO操作,不必緊張 while ((length = bufferStream.read(bufferArea, 0, 1024 * 10)) != -1) { zipOut.write(bufferArea, 0, length); } //關閉流 fileInput.close(); // 需要注意的是緩沖流必須要關閉流,否則輸出無效 bufferStream.close(); // 壓縮流不必關閉,使用完后再關}

三、結束

我也是第一次接觸批量下載,它本身并不難,都只是一些IO的常規(guī)操作,沒有彎彎繞繞,只是在實現(xiàn)完整功能的過程中踩到了一些坑,在此記錄一下,以便加深印象和幫助他人吧~~

到此這篇關于Java實現(xiàn)批量下載(打包成zip)的實現(xiàn)的文章就介紹到這了,更多相關Java 批量下載 內容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品地址| 一区二区国产在线观看| 国产91在线精品| 美女久久久久| 日本v片在线高清不卡在线观看| 亚洲精品影院在线观看| 欧美久久精品一级c片| 欧美国产美女| 精品国产一区二区三区噜噜噜| 欧美日韩视频免费看| 日韩欧美激情电影| 日韩av在线免费观看不卡| 首页国产欧美日韩丝袜| 美女黄网久久| 天堂va在线高清一区| 中文不卡在线| 日本久久一区| 久久国产麻豆精品| 国产黄色精品| 蜜臀国产一区| 欧美日一区二区| 精品欧美激情在线观看| 在线成人直播| 亚洲精品第一| 国产精品jk白丝蜜臀av小说| 欧美黄色精品| 麻豆国产精品一区二区三区| 国产经典一区| 啪啪国产精品| 亚洲资源网站| 大香伊人久久精品一区二区| 日韩和的一区二在线| 久久www成人_看片免费不卡| 国产亚洲精品美女久久| 色网在线免费观看| 亚洲免费激情| 国产欧美日韩在线观看视频 | 久久激情综合网| 不卡福利视频| 日韩欧美2区| 日韩精品一区第一页| 婷婷激情久久| 国产精品白丝久久av网站| 久久久久午夜电影| 国产欧美在线| 老鸭窝毛片一区二区三区| 精品亚洲精品| 日本成人在线不卡视频| 欧美日韩水蜜桃| 亚洲精品日本| а√天堂中文在线资源8| aⅴ色国产欧美| 国产欧美日韩精品一区二区三区| 亚洲成人精品| 欧美一区二区三区久久| 日韩精品久久理论片| 成人综合一区| 中文字幕日韩欧美精品高清在线| 久久精品亚洲| 久久性天堂网| 日韩一区二区三区免费播放| 日韩一区二区三区在线看| 久久人人99| 欧美国产先锋| 久久亚洲精品中文字幕蜜潮电影| 亚洲资源网站| 激情婷婷久久| 国产乱码精品一区二区亚洲| 日韩精品91| 久久99性xxx老妇胖精品| 亚洲视频国产| 国产尤物精品| 精品美女在线视频| 一本一道久久a久久| 水蜜桃精品av一区二区| 久久一二三区| 久久精品在线| 国产精品sss在线观看av| 在线综合亚洲| av中文资源在线资源免费观看| 亚洲日本免费电影| 日韩超碰人人爽人人做人人添| 日韩激情网站| 香蕉久久一区| 在线观看一区| 蜜桃视频一区二区| 妖精视频成人观看www| 群体交乱之放荡娇妻一区二区| 国产欧美一区二区三区国产幕精品| 免费看精品久久片| 欧美福利一区| 久久美女性网| 成人羞羞在线观看网站| 亚洲专区视频| 日韩在线观看一区二区| 国产高清一区| 国产一区日韩一区| 国产欧美丝祙| 欧美黄页在线免费观看| 欧美国产另类| 吉吉日韩欧美| 欧美国产专区| 欧美成人基地 | 久久麻豆视频| 国产资源在线观看入口av| 国产黄大片在线观看| 91高清一区| 欧美日韩国产亚洲一区| 日韩深夜视频| 蜜臀精品一区二区三区在线观看 | 久久精品系列| 伊人精品在线| 国产欧美日韩精品一区二区免费| 激情黄产视频在线免费观看| 亚洲一区二区免费看| 日韩电影免费网站| 亚洲综合色婷婷在线观看| 国产在线一区不卡| 欧美日韩伊人| 国产精品腿扒开做爽爽爽挤奶网站| 国产欧美自拍| 在线精品国产亚洲| 成人在线网站| 国产精品久久久亚洲一区| 欧美日韩亚洲在线观看| 精品资源在线| 97久久中文字幕| 日韩专区在线视频| 麻豆理论在线观看| 婷婷五月色综合香五月| 成人日韩av| 欧美日韩精品一区二区三区视频 | 欧美资源在线| 性欧美videohd高精| 欧美1区2区3| 动漫av一区| 麻豆国产欧美日韩综合精品二区| 免费久久久久久久久| 久久精品国产99国产| 日韩国产高清在线| 亚洲日本三级| 夜夜嗨一区二区三区| 99久久夜色精品国产亚洲狼 | 美美哒免费高清在线观看视频一区二区| 麻豆mv在线观看| 国产不卡av一区二区| 激情久久一区二区| 精品一区二区三区中文字幕在线| 日韩不卡一二三区| 日本欧美一区二区| 免费人成网站在线观看欧美高清| 亚洲高清影视| 婷婷综合激情| 99久久久久国产精品| 久久久成人网| 国产一区欧美| 免费欧美在线视频| 亚洲欧洲美洲国产香蕉| 免费日韩一区二区| 日本亚洲欧洲无免费码在线| 亚洲制服一区| 欧美一区不卡| 欧美激情一区| 国产一区二区三区四区| 日韩精品永久网址| 免费观看不卡av| 国产精品1luya在线播放| 欧美精品三级在线| 欧美日韩在线精品一区二区三区激情综合 | 麻豆一区二区三| 岛国av免费在线观看| 91精品在线观看国产| 免费精品视频| 老司机免费视频一区二区| 亚洲二区在线| 久久精品xxxxx| 999国产精品视频| 日韩av中文在线观看| 在线亚洲人成| 欧美在线看片| 亚洲精品福利电影| 国产精品外国| 国产欧美二区| 国产极品模特精品一二| 国产精品手机在线播放| 秋霞国产精品| 国产亚洲高清一区| 美女网站一区| 伊人久久国产| 欧美日一区二区在线观看| 国产专区一区| 欧美激情麻豆| 少妇精品久久久| 日本久久黄色| 欧美三区四区| 国产毛片精品久久| 亚洲精华国产欧美| 久久久久免费av| 国产一区二区三区不卡av| 日韩高清在线观看一区二区|