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

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

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

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

引言

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

一、前端JS發送下載請求

1、ajax無法發送下載請求

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

2、js發送下載請求:超鏈接方式

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

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

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

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

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

$(’.download-btn’).click(function () { // 如果要傳選中行的id,則從頁面獲取到所有id,可以拿逗號拼接,放到輸入框傳給后臺 // 如果需要把選中行整行數據傳到后臺,form表單不支持傳json格式數據,所以可以把 // 選中行數據放入數組,轉為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); //提交表單,實現下載 $dataForm.submit();});

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

二、后臺處理

此處省略接收參數,獲取需要下載的文件的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) { // 創建臨時路徑,存放壓縮文件 String zipFilePath = 'D:workspace-IDEAzip我的zip.zip'; // 壓縮輸出流,包裝流,將臨時文件輸出流包裝成壓縮流,將所有文件輸出到這里,打成zip包 ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFilePath)); // 循環調用壓縮文件方法,將一個一個需要下載的文件打入壓縮文件包 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方法為文件復制,在這里直接實現了下載效果 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); // 獲取文件名稱,如果有特殊命名需求,可以將參數列表拓展,傳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; // 最常規IO操作,不必緊張 while ((length = bufferStream.read(bufferArea, 0, 1024 * 10)) != -1) { zipOut.write(bufferArea, 0, length); } //關閉流 fileInput.close(); // 需要注意的是緩沖流必須要關閉流,否則輸出無效 bufferStream.close(); // 壓縮流不必關閉,使用完后再關}

三、結束

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

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

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲一区二区三区在线免费| 视频一区中文| 中文字幕成人| 激情久久婷婷| 欧美sm一区| 日韩1区2区3区| 欧美日韩精品免费观看视频完整| 国产91欧美| 国产精品久久久久av蜜臀| 亚洲午夜久久| 亚洲美女久久精品| 精品三级在线观看视频| 日本欧美久久久久免费播放网| 激情欧美亚洲| 精精国产xxxx视频在线野外 | 免费美女久久99| 亚洲三级av| 亚洲一卡久久| 成人在线免费观看91| 国产探花一区| 日本精品久久| 日韩中文一区二区| 亚洲日产国产精品| 国产午夜久久| 久久久成人网| 久久久久91| 99国产精品一区二区| 国产一区二区三区亚洲| 美女国产一区二区三区| 美女尤物国产一区| 久久精品999| 欧美精品三级在线| 国产精品中文| 91精品1区| 日本国产欧美| 亚洲精品裸体| 日韩毛片一区| 精品捆绑调教一区二区三区| 美女在线视频一区| 精品国产亚洲一区二区三区在线| 免费观看亚洲天堂| 日本不卡中文字幕| 日韩久久99| 婷婷综合国产| 日韩精品一区二区三区中文| 国产亚洲欧美日韩在线观看一区二区| 欧美午夜三级| 国产精品一二| 久久97视频| 伊伊综合在线| 久久国产精品成人免费观看的软件| 欧美一区二区三区激情视频| 激情黄产视频在线免费观看| 精品视频91| 日本黄色精品| 久久精品青草| 乱人伦精品视频在线观看| 免费日韩视频| 日韩激情av在线| 7777精品| 91精品国产自产精品男人的天堂 | 日韩伦理福利| 亚洲最大av| 久久亚洲图片| 在线亚洲成人| 国产精品高清一区二区| 日韩一区精品| 久久av中文| 私拍精品福利视频在线一区| 午夜在线精品偷拍| 日韩中文av| 麻豆一区二区三| 精品一区欧美| 青草综合视频| 高清不卡一区| 老司机精品久久| 国产极品模特精品一二| 欧洲一级精品| 日韩专区欧美专区| 激情久久五月| japanese国产精品| 亚洲高清成人| 毛片不卡一区二区| 麻豆亚洲精品| 欧洲一区二区三区精品| 久久狠狠亚洲综合| 91精品观看| 精品福利久久久| 日本不卡一区二区三区| 欧美日韩激情| 色爱综合网欧美| 国产无遮挡裸体免费久久| 91久久中文| 欧美激情另类| 麻豆国产91在线播放| 日韩在线综合| 国产精品一国产精品| 欧美香蕉视频| 国产一区2区| 久久国产尿小便嘘嘘| 亚洲免费黄色| 91精品国产成人观看| 国产白浆在线免费观看| 亚洲性色av| 日韩精品久久理论片| 欧美在线资源| 日韩中文首页| 久久久久免费| 美女久久精品| 日本综合视频| 亚洲国内精品| 欧美成人基地| 日本а中文在线天堂| 精品中文字幕一区二区三区| 国产精品成人**免费视频| 欧美日韩xxxx| 日韩在线网址| 亚洲免费毛片| 四虎国产精品免费久久| 亚洲精品乱码| 日韩精品欧美精品| 亚洲+小说+欧美+激情+另类| 香蕉久久久久久久av网站| 亚洲激情久久| 欧美va天堂在线| 亚洲国产专区| 亚洲性图久久| 一区二区视频欧美| 久久亚洲电影| 亚洲精品系列| 蜜臀久久99精品久久久久宅男| 婷婷成人基地| 亚洲成人av观看| 成人在线视频免费| 成人午夜在线| 日韩一区电影| 亚洲爱爱视频| 久久视频国产| 九九综合九九| 亚洲少妇一区| 免费看日韩精品| 快she精品国产999| 亚州精品视频| 国产日韩免费| 老司机免费视频一区二区三区| 久久香蕉网站| 国产一区二区三区免费在线 | 国产精品一区高清| 蜜桃久久久久| a国产在线视频| 久久要要av| 欧美在线综合| 91福利精品在线观看| 日本成人在线视频网站| 国产精品久久久久久妇女 | 欧美三区不卡| 99在线观看免费视频精品观看| 99成人在线视频| 欧美+亚洲+精品+三区| 精品视频一区二区三区在线观看 | 国产精品对白| 精品国产亚洲一区二区三区在线 | 蜜桃av一区| 日韩精品一区二区三区中文 | 久久国产主播| 99久久久久国产精品| 亚洲一区二区网站| 国产精品porn| 91精品一区国产高清在线gif| 午夜宅男久久久| 色狠狠一区二区三区| 麻豆一区二区99久久久久| 日韩欧美精品| 亚洲资源网站| 日韩综合在线| 视频一区视频二区在线观看| 久久av影院| 国产精品普通话对白| 国产日韩一区二区三免费高清| 国产夫妻在线| 亚洲男人在线| 久久国产精品免费一区二区三区| 久久精品免视看国产成人| 视频一区中文| 国产精品三级| 久久国产毛片| 亚洲精品亚洲人成在线观看| 国产精品成人a在线观看| 国产一级久久| 免费视频一区二区三区在线观看| 亚洲二区免费| 国产乱子精品一区二区在线观看 | 在线成人动漫av| 欧美一级一区| 国产综合欧美| 国产美女亚洲精品7777| 国产99精品| 麻豆精品蜜桃视频网站| 欧美女激情福利| 国产成年精品|