电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:4日期: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
相關文章:
主站蜘蛛池模板: 防火窗_耐火窗_防火门厂家_防火卷帘门-重庆三乐门业有限公司 | 新疆乌鲁木齐网站建设-乌鲁木齐网站制作设计-新疆远璨网络 | 流量检测仪-气密性检测装置-密封性试验仪-东莞市奥图自动化科技有限公司 | 上海质量认证办理中心 | 口信网(kousing.com) - 行业资讯_行业展会_行业培训_行业资料 | 合肥抖音SEO网站优化-网站建设-网络推广营销公司-百度爱采购-安徽企匠科技 | 长春网站建设,五合一网站设计制作,免费优化推广-长春网站建设 | 压片机_高速_单冲_双层_花篮式_多功能旋转压片机-上海天九压片机厂家 | 冷库安装厂家_杭州冷库_保鲜库建设-浙江克冷制冷设备有限公司 | 螺钉式热电偶_便携式温度传感器_压簧式热电偶|无锡联泰仪表有限公司|首页 | 东莞螺丝|东莞螺丝厂|东莞不锈钢螺丝|东莞组合螺丝|东莞精密螺丝厂家-东莞利浩五金专业紧固件厂家 | 原色会计-合肥注册公司_合肥代理记账公司_营业执照代办 | 球盟会·(中国)官方网站 | 宝元数控系统|对刀仪厂家|东莞机器人控制系统|东莞安川伺服-【鑫天驰智能科技】 | 工业车间焊接-整体|集中除尘设备-激光|等离子切割机配套除尘-粉尘烟尘净化治理厂家-山东美蓝环保科技有限公司 | 抓斗式清污机|螺杆式|卷扬式启闭机|底轴驱动钢坝|污水处理闸门-方源水利机械 | 全自动变压器变比组别测试仪-手持式直流电阻测试仪-上海来扬电气 | 首页-浙江橙树网络技术有限公司 石磨面粉机|石磨面粉机械|石磨面粉机组|石磨面粉成套设备-河南成立粮油机械有限公司 | 废气处理_废气处理设备_工业废气处理_江苏龙泰环保设备制造有限公司 | 刹车盘机床-刹车盘生产线-龙口亨嘉智能装备 | 魔方网-培训咨询服务平台 | 进口便携式天平,外校_十万分之一分析天平,奥豪斯工业台秤,V2000防水秤-重庆珂偌德科技有限公司(www.crdkj.com) | 手术室净化厂家-成都做医院净化工程的公司-四川华锐-15年特殊科室建设经验 | 步进电机_agv电机_伺服马达-伺服轮毂电机-和利时电机 | 过跨车_过跨电瓶车_过跨转运车_横移电动平车_厂区转运车_无轨转运车 | 北京自然绿环境科技发展有限公司专业生产【洗车机_加油站洗车机-全自动洗车机】 | 专业甜品培训学校_广东糖水培训_奶茶培训_特色小吃培训_广州烘趣甜品培训机构 | 蜗轮丝杆升降机-螺旋升降机-丝杠升降机厂家-润驰传动 | 考勤系统_考勤管理系统_网络考勤软件_政企|集团|工厂复杂考勤工时统计排班管理系统_天时考勤 | 搪玻璃冷凝器_厂家-越宏化工设备| 大_小鼠elisa试剂盒-植物_人Elisa试剂盒-PCR荧光定量试剂盒-上海一研生物科技有限公司 | 展厅设计-展馆设计-专业企业展厅展馆设计公司-昆明华文创意 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛婚外情取证-青岛王军侦探事务所 | 硫酸钡厂家_高光沉淀硫酸钡价格-河南钡丰化工有限公司 | 密封圈_泛塞封_格莱圈-[东莞市国昊密封圈科技有限公司]专注密封圈定制生产厂家 | 武汉创亿电气设备有限公司_电力检测设备生产厂家 | 软文世界-软文推广-软文营销-新闻稿发布-一站式软文自助发稿平台 | 热熔胶网膜|pes热熔网膜价格|eva热熔胶膜|热熔胶膜|tpu热熔胶膜厂家-苏州惠洋胶粘制品有限公司 | 网络推广公司_网络营销方案策划_企业网络推广外包平台-上海澜推网络 | 3dmax渲染-效果图渲染-影视动画渲染-北京快渲科技有限公司 | 集装箱标准养护室-集装箱移动式养护室-广州璟业试验仪器有限公司 |