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

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

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

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

引言

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

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

1、ajax無(wú)法發(fā)送下載請(qǐng)求

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

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

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

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

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

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

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

$(’.download-btn’).click(function () { // 如果要傳選中行的id,則從頁(yè)面獲取到所有id,可以拿逗號(hào)拼接,放到輸入框傳給后臺(tái) // 如果需要把選中行整行數(shù)據(jù)傳到后臺(tái),form表單不支持傳json格式數(shù)據(jù),所以可以把 // 選中行數(shù)據(jù)放入數(shù)組,轉(zhuǎn)為json放入輸入框,后臺(tái)用String接收,然后再轉(zhuǎn)回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); //提交表單,實(shí)現(xiàn)下載 $dataForm.submit();});

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

二、后臺(tái)處理

此處省略接收參數(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)建臨時(shí)路徑,存放壓縮文件 String zipFilePath = 'D:workspace-IDEAzip我的zip.zip'; // 壓縮輸出流,包裝流,將臨時(shí)文件輸出流包裝成壓縮流,將所有文件輸出到這里,打成zip包 ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFilePath)); // 循環(huán)調(diào)用壓縮文件方法,將一個(gè)一個(gè)需要下載的文件打入壓縮文件包 for (String path : paths) { // 該方法在下面定義 fileToZip(path, zipOut); } // 壓縮完成后,關(guān)閉壓縮流 zipOut.close(); //拼接下載默認(rèn)名稱并轉(zhuǎn)為ISO-8859-1格式 String fileName = new String(('我的壓縮文件.zip').getBytes(),'ISO-8859-1'); response.setHeader('Content-Disposition', 'attchment;filename='+fileName); //該流不可以手動(dòng)關(guān)閉,手動(dòng)關(guān)閉下載會(huì)出問(wèn)題,下載完成后會(huì)自動(dòng)關(guān)閉 ServletOutputStream outputStream = response.getOutputStream(); FileInputStream inputStream = new FileInputStream(zipFilePath); // 如果是SpringBoot框架,在這個(gè)路徑 // org.apache.tomcat.util.http.fileupload.IOUtils產(chǎn)品 // 否則需要自主引入apache的 commons-io依賴 // copy方法為文件復(fù)制,在這里直接實(shí)現(xiàn)了下載效果 IOUtils.copy(inputStream, outputStream); // 關(guān)閉輸入流 inputStream.close(); //下載完成之后,刪掉這個(gè)zip包 File fileTempZip = new File(zipFilePath); fileTempZip.delete(); }}

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

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); // 將當(dāng)前文件作為一個(gè)zip實(shí)體寫入壓縮流,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); } //關(guān)閉流 fileInput.close(); // 需要注意的是緩沖流必須要關(guān)閉流,否則輸出無(wú)效 bufferStream.close(); // 壓縮流不必關(guān)閉,使用完后再關(guān)}

三、結(jié)束

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

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

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 工业淬火油烟净化器,北京油烟净化器厂家,热处理油烟净化器-北京众鑫百科 | 土壤有机碳消解器-石油|表层油类分析采水器-青岛溯源环保设备有限公司 | 槽钢冲孔机,槽钢三面冲,带钢冲孔机-山东兴田阳光智能装备股份有限公司 | 上海三信|ph计|酸度计|电导率仪-艾科仪器 | 团建-拓展-拓展培训-拓展训练-户外拓展训练基地[无锡劲途] | 淘剧影院_海量最新电视剧,免费高清电影随心观看 | 成都软件开发_OA|ERP|CRM|管理系统定制开发_成都码邻蜀科技 | 衬氟旋塞阀-卡套旋塞阀-中升阀门首页 | Magnescale探规,Magnescale磁栅尺,Magnescale传感器,Magnescale测厚仪,Mitutoyo光栅尺,笔式位移传感器-苏州连达精密量仪有限公司 | 可程式恒温恒湿试验箱|恒温恒湿箱|恒温恒湿试验箱|恒温恒湿老化试验箱|高低温试验箱价格报价-广东德瑞检测设备有限公司 | 合肥制氮机_合肥空压机厂家_安徽真空泵-凯圣精机 | 蜘蛛车-登高车-高空作业平台-高空作业车-曲臂剪叉式升降机租赁-重庆海克斯公司 | 滚珠丝杆升降机_螺旋升降机_丝杠升降机-德迈传动 | 代写标书-专业代做标书-商业计划书代写「深圳卓越创兴公司」 | 河南生物显微镜,全自动冰冻切片机-河南荣程联合科技有限公司 | 超声波清洗机-超声波清洗设备定制生产厂家 - 深圳市冠博科技实业有限公司 | 土壤养分检测仪_肥料养分检测仪_土壤水分检测仪-山东莱恩德仪器 大型多片锯,圆木多片锯,方木多片锯,板材多片锯-祥富机械有限公司 | 校服厂家,英伦校服定做工厂,园服生产定制厂商-东莞市艾咪天使校服 | 合肥抖音SEO网站优化-网站建设-网络推广营销公司-百度爱采购-安徽企匠科技 | 大功率金属激光焊接机价格_不锈钢汽车配件|光纤自动激光焊接机设备-东莞市正信激光科技有限公司 定制奶茶纸杯_定制豆浆杯_广东纸杯厂_[绿保佳]一家专业生产纸杯碗的厂家 | 2025世界机器人大会_IC China_半导体展_集成电路博览会_智能制造展览网 | 走心机厂家,数控走心机-台州博城智能科技有限公司 | 水厂自动化|污水处理中控系统|水利信息化|智慧水务|智慧农业-山东德艾自动化科技有限公司 | FAG轴承,苏州FAG轴承,德国FAG轴承-恩梯必传动设备(苏州)有限公司 | 七维官网-水性工业漆_轨道交通涂料_钢结构漆 | SEO网站优化,关键词排名优化,苏州网站推广-江苏森歌网络 | 闪电优家-卫生间防水补漏_酒店漏水渗水维修_防水堵漏公司 | 撕碎机_轮胎破碎机_粉碎机_回收生产线厂家_东莞华达机械有限公司 | 钢结构-钢结构厂房-钢结构工程[江苏海逵钢构厂] | 亮点云建站-网站建设制作平台| 北京浩云律师事务所-企业法律顾问_破产清算等公司法律服务 | 洛阳网站建设_洛阳网站优化_网站建设平台_洛阳香河网络科技有限公司 | 重庆网站建设,重庆网站设计,重庆网站制作,重庆seo,重庆做网站,重庆seo,重庆公众号运营,重庆小程序开发 | 滚塑PE壳体-PE塑料浮球-警示PE浮筒-宁波君益塑业有限公司 | 招商帮-一站式网络营销服务|互联网整合营销|网络推广代运营|信息流推广|招商帮企业招商好帮手|搜索营销推广|短视视频营销推广 | 有机肥设备生产制造厂家,BB掺混肥搅拌机、复合肥设备生产线,有机肥料全部加工设备多少钱,对辊挤压造粒机,有机肥造粒设备 -- 郑州程翔重工机械有限公司 | 传递窗_超净|洁净工作台_高效过滤器-传递窗厂家广州梓净公司 | Akribis直线电机_直线模组_力矩电机_直线电机平台|雅科贝思Akribis-杭州摩森机电科技有限公司 | 水质监测站_水质在线分析仪_水质自动监测系统_多参数水质在线监测仪_水质传感器-山东万象环境科技有限公司 | 商用绞肉机-熟肉切片机-冻肉切丁机-猪肉开条机 - 广州市正盈机械设备有限公司 | 塑料造粒机「厂家直销」-莱州鑫瑞迪机械有限公司 |