亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

java后臺批量下載文件并壓縮成zip下載的方法

2024-07-14 08:41:34
字體:
來源:轉載
供稿:網友

本文實例為大家分享了java后臺批量下載文件并壓縮成zip下載的具體代碼,供大家參考,具體內容如下

因項目需要,將服務器上的圖片文件壓縮打包zip,下載到本地桌面。

首先,前端js:

function doQueryPic() { var picsDate = $("#picsDate").val(); var piceDate = $("#piceDate").val(); var picInst = $("#pic_inst").combotree("getValue"); var svrCode = $("#pic_svr_code").val(); var picsTime = $("#pic_stime").val(); var piceTime = $("#pic_etime").val(); if (svrCode == null) { $.messager.alert('提示', "請輸入交易查詢代號"); return; }else{ $.ajax({ type: "POST", url: 'queryPic.translog.action', data: {f_brno:picInst,f_sdate:picsDate,f_edate:piceDate,f_svr_code:svrCode,f_stime:picsTime,f_etime:piceTime}, success: function(rcdata){ if(rcdata.success){ var rows = rcdata.picInfo; var detailHtml = "<table class='my-form-table' cellpadding='0' cellspacing='0' width='90%' align='center'><thead><tr><th style='width: 5%;text-align: center'><input type='checkbox' onclick='swapCheck()' />全選</th><th style='width: 10%;text-align: center'>日期</th><th style='width: 10%;text-align: center'>有無影像</th><th style='width: 23%;text-align: center'>交易名稱</th><th style='width: 10%;text-align: center'>交易狀態</th><th style='width: 12%;text-align: center'>設備編號</th><th style='width: 10%;text-align: center'>交易代號</th><th style='width: 10%;text-align: center'>所屬機構</th><th style='width: 10%;text-align: center'>交易時間</th></tr></thead><tbody>";  for(var i = 0;i < rows.length;i++){ detailHtml = detailHtml + "<tr><td align='center'><input type='checkbox' name='pictureID' value='"+ rows[i].F_DATE + rows[i].F_ICS_BATCH +"' /></td><td>" + rows[i].F_DATE + "</td><td>" + rows[i].ISHASIMG + "</td><td>" + rows[i].F_TX_NAME + "</td><td>" + rows[i].F_STUS + "</td><td>" + rows[i].F_DEV_ID + "</td><td>" + rows[i].F_SVR_CODE + "</td><td>" + rows[i].F_BRNO + "</td><td>" + rows[i].F_TIME + "</td></tr>";  }  detailHtml = detailHtml + "</tbody></table>"; document.getElementById("details").innerHTML = detailHtml;   }else{ $.messager.alert('提示',rcdata.errmsg); }  }, error:function(){ alert("查詢失敗!"); } }); } }

以上代碼是查詢到相關數據后,顯示在界面上,然后按客戶需要可以自己選擇下載哪幾條數據保存。

附上CheckBox全選/取消全選js代碼

//checkbox 全選/取消全選var isCheckAll = false;function swapCheck() { if (isCheckAll) { $("input[type='checkbox']").each(function() { this.checked = false; }); isCheckAll = false; } else { $("input[type='checkbox']").each(function() { this.checked = true; }); isCheckAll = true; }}

下面代碼是用來后臺交互的,提示一下,下載文件都不要用ajax來送數據,我之前就是ajax做的,一直沒法下載,困擾了一整天后來才發現的,注釋部分就是ajax代碼,大家作為參考可以看一下:

function downLoadPic() { var arr = new Array();  var picIDs = document.getElementsByName("pictureID");  for (i = 0; i < picIDs.length; i++) {   if (picIDs[i].checked) {   arr.push(picIDs[i].value);   }  }  if (arr.length <= 0 ) { $.messager.alert('提示', "無下載內容!"); return; }else{ $('#formPic').attr('action','downLoadPic.translog.action'); $("#formPic").form('submit',{ onSubmit:function(){  }, success:function(data){ $.messager.alert('提示','圖片下載成功','info'); } }); /** *$.ajax({ type: "POST", url: 'downLoadPic.translog.action', data: {pictureList:JSON.stringify(arr)}, success: function(rcdata){ if(rcdata.success){ $.messager.show({ title : '成功', msg : rcdata.errmsg });  }else{ $.messager.alert('提示',rcdata.errmsg); }  }, error:function(){ alert("查詢失敗!"); } }); */ } }

接下來是后臺交互,首先是controller控制層:

/** * 圖片批量下載 * @param request * @param response * @return * @throws IOException  */ public void downLoadPic(HttpServletRequest request,HttpServletResponse response) throws IOException{ //Map<String, Object> params = getParameters(request); String[] pictureIDs = request.getParameterValues("pictureID"); Authentication au=getAuthentication(request); service.downLoadPic(pictureIDs, au, request, response); return ; }

service層:

public void downLoadPic(String[] params,Authentication au,HttpServletRequest request,HttpServletResponse response) throws IOException {  //壓縮文件初始設置 String path=System.getProperty("ics.webapp.root");//這個是服務器路徑地址,request.getSession().getServletContext().getRealPath() 也一樣能 String fileZip = au.getUsername()+"-"+au.getAttribute("F_BRNO")+ "Pictures.zip"; String filePath = path+"//" + fileZip;//之后用來生成zip文件  //filePathArr為根據前臺傳過來的信息,通過數據庫查詢所得出的pdf文件路徑集合(具體到后綴) List<Map<String, Object>> fileNameArr = new ArrayList<Map<String,Object>>(); //JSONArray jsons = JSONArray.fromObject(params.get("pictureList")); /** *List<String> pictureIDs = new ArrayList<String>(); for(Object obj:jsons){ pictureIDs.add(obj.toString()); } */ for (int i = 0; i < params.length; i++) { Map<String, Object> speMap = new HashMap<String, Object>(); speMap.put("f_date", params[i].substring(0, 8)); speMap.put("f_ics_batch", params[i].substring(8)); List<Map<String, Object>> reclists=dao.queryLogInfo(speMap); for (int j = 0; j < reclists.size(); j++) { fileNameArr.add(reclists.get(j)); } }  //需要壓縮的文件--包括文件地址和文件名 //String[] pathtytytyt ={"D://13.jpg","D://1212.jpg"}; // 要生成的壓縮文件地址和文件名稱 //String desPath = "D://DOWNLOADS//new.zip"; File zipFile = new File(filePath); ZipOutputStream zipStream = null; FileInputStream zipSource = null; BufferedInputStream bufferStream = null; try { //構造最終壓縮包的輸出流 zipStream = new ZipOutputStream(new FileOutputStream(zipFile)); for(int i =0;i<fileNameArr.size();i++){ File file = new File((String) fileNameArr.get(i).get("F_FILENAME")); //File file = new File(pathtytytyt[i]); //將需要壓縮的文件格式化為輸入流 zipSource = new FileInputStream(file); //壓縮條目不是具體獨立的文件,而是壓縮包文件列表中的列表項,稱為條目,就像索引一樣 //這里的name就是文件名,文件名和之前的重復就會導致文件被覆蓋,在這用i加文件名進行單一文件識別 ZipEntry zipEntry = new ZipEntry(i+file.getName()); //定位該壓縮條目位置,開始寫入文件到壓縮包中 zipStream.putNextEntry(zipEntry); //輸入緩沖流 bufferStream = new BufferedInputStream(zipSource, 1024 * 10); int read = 0; //創建讀寫緩沖區 byte[] buf = new byte[1024 * 10]; while((read = bufferStream.read(buf, 0, 1024 * 10)) != -1) { zipStream.write(buf, 0, read); } }  } catch (Exception e) { e.printStackTrace(); } finally { //關閉流 try {  if(null != bufferStream) bufferStream.close();  if(null != zipStream) zipStream.close();  if(null != zipSource) zipSource.close(); } catch (IOException e) {  e.printStackTrace(); } }  /** * 寫流文件到前端瀏覽器 ServletOutputStream os = response.getOutputStream(); response.setContentType("application/x-octet-stream"); response.setContentLength((int) zipFile.length()); response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileZip, "UTF-8")); BufferedInputStream bis = null; BufferedOutputStream bos = null; try { bis = new BufferedInputStream(new FileInputStream(filePath)); bos = new BufferedOutputStream(os); byte[] buff = new byte[2048]; int bytesRead; while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) { bos.write(buff, 0, bytesRead); } os.flush(); os.close(); } catch (IOException e) { throw e; } finally { if (bis != null) bis.close(); if (bos != null) bos.close(); File obj = new File(filePath); if (obj.exists()) { obj.delete();//刪除服務器本地產生的臨時壓縮文件 } }*/   //進行瀏覽器下載  //獲得瀏覽器代理信息 final String userAgent = request.getHeader("USER-AGENT"); //判斷瀏覽器代理并分別設置響應給瀏覽器的編碼格式 String finalFileName = null; if(StringUtils.contains(userAgent, "MSIE")||StringUtils.contains(userAgent,"Trident")){//IE瀏覽器 finalFileName = URLEncoder.encode(fileZip,"UTF-8"); System.out.println("IE瀏覽器"); }else if(StringUtils.contains(userAgent, "Mozilla")){//google,火狐瀏覽器 finalFileName = URLEncoder.encode(fileZip,"UTF-8"); }else{ finalFileName = URLEncoder.encode(fileZip,"UTF-8");//其他瀏覽器 } response.setContentType("application/x-octet-stream");//告知瀏覽器下載文件,而不是直接打開,瀏覽器默認為打開 response.setHeader("Content-Disposition" ,"attachment;filename=" +finalFileName);//下載文件的名稱  ServletOutputStream servletOutputStream=response.getOutputStream(); DataOutputStream temps = new DataOutputStream(servletOutputStream);  DataInputStream in = new DataInputStream(new FileInputStream(filePath));//瀏覽器下載文件的路徑 byte[] b = new byte[2048]; File reportZip=new File(filePath);//之后用來刪除臨時壓縮文件 try { while ((in.read(b)) != -1) { temps.write(b); } temps.flush(); } catch (Exception e) { e.printStackTrace(); optLogsvc.saveLog(au.getUsername(), au.getAttribute("F_BRNO"), au.getAttribute("F_LSTIP"), TOptlogService.TYPE_MR, "", au.getUsername() + "批量下載圖片"+fileZip+"失?。?quot;); }finally{ if(temps!=null) temps.close(); if(in!=null) in.close(); if(reportZip!=null) reportZip.delete();//刪除服務器本地產生的臨時壓縮文件 servletOutputStream.close(); } /** *if (picInfolList.size() > 0) { rc.put("success", true); rc.put("picInfo", picInfolList); optLogsvc.saveLog(au.getUsername(), au.getAttribute("F_BRNO"), au.getAttribute("F_LSTIP"), TOptlogService.TYPE_MR, "", au.getUsername() + "查詢批量下載"+params.get("f_svr_code")+"成功!"); } else { rc.put("success", false); rc.put("errmsg", "test info"); optLogsvc.saveLog(au.getUsername(), au.getAttribute("F_BRNO"), au.getAttribute("F_LSTIP"), TOptlogService.TYPE_MR, "", au.getUsername() + "查詢批量下載"+params.get("f_svr_code")+"失敗!"); }*/ optLogsvc.saveLog(au.getUsername(), au.getAttribute("F_BRNO"), au.getAttribute("F_LSTIP"), TOptlogService.TYPE_MR, "", au.getUsername() + "批量下載圖片"+fileZip+"成功!"); return ; }

里面夾雜了json數組轉格式問題,前端json傳過來的如果是json.stringify格式化的,到后臺就得用這種方式進行解析。

本人排版能力不咋樣,大家將就看看,那邊判斷瀏覽器的也是網上抄的,結果發現根本沒有用,無法識別中文,最后妥協了還是使用英文做文件名。如果有碰到中文亂碼的,大家可以百度再搜搜,有其他人寫過類似文章,我沒精力研究了。

這個是壓縮服務器上本身存在的文件方法,之前百度相關文章還看到過獲取網絡圖片并壓縮下載的,有點意思。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一区二区三区www| www.日韩不卡电影av| 日日骚久久av| 欧美色xxxx| 国产精品爱啪在线线免费观看| 美日韩精品免费视频| 亚洲色图av在线| 国产亚洲美女精品久久久| 日韩亚洲一区二区| 青青草一区二区| 久久频这里精品99香蕉| 成人免费黄色网| 国产亚洲精品久久久久久| 欧美一级电影免费在线观看| 国产97在线亚洲| 亚洲aaaaaa| 欧美亚洲成人免费| 国产精品777| 精品露脸国产偷人在视频| 亚洲成人中文字幕| 国产精品狼人色视频一区| 久久久av亚洲男天堂| 精品成人国产在线观看男人呻吟| 91九色精品视频| 成人a在线观看| 日韩免费在线看| 日韩欧美一区二区三区| 91精品在线播放| 国内自拍欧美激情| zzjj国产精品一区二区| 欧美日韩国产在线看| 影音先锋日韩有码| 日韩欧美一区二区三区| 成人中文字幕+乱码+中文字幕| 中文字幕9999| 日韩欧美极品在线观看| 日韩av日韩在线观看| 欧美一级淫片播放口| 一本一道久久a久久精品逆3p| 亚洲高清久久久久久| 欧美日韩综合视频网址| 成人免费观看49www在线观看| 亚洲天堂网站在线观看视频| 性欧美xxxx视频在线观看| 亚洲成人av资源网| 欧美怡春院一区二区三区| 国产精品网红直播| 日韩经典一区二区三区| 欧美乱大交xxxxx另类电影| 日韩国产欧美精品在线| www.日韩.com| 国产精品精品视频| 欧美高跟鞋交xxxxxhd| 成人国产精品久久久| 欧美电影免费观看网站| 国产精品自拍偷拍| 久久亚洲精品毛片| 琪琪亚洲精品午夜在线| 狠狠色噜噜狠狠狠狠97| 欧美性xxxxx极品| 日韩小视频在线观看| 亚洲美女自拍视频| 亚洲aa在线观看| 在线观看日韩www视频免费| 久久久人成影片一区二区三区观看| 日韩一二三在线视频播| 国产精品国产福利国产秒拍| 91视频免费网站| 一区二区三区日韩在线| 亚洲新中文字幕| 日韩精品免费在线| 亚洲人成电影网站色xx| 欧美黑人巨大xxx极品| 国产精品视频免费观看www| 亚洲欧美在线磁力| 国产日韩精品在线| 国产精品欧美日韩| 国产亚洲综合久久| 亚洲综合大片69999| 国产精品99久久久久久www| 欧美日韩亚洲系列| 国产成人精品999| 国产精品美女www| 国产精品情侣自拍| 日本不卡免费高清视频| 国产精品久久久久久av下载红粉| 成人黄色影片在线| 国产成人黄色av| 亚洲视频欧洲视频| 欧美另类老女人| www.欧美精品| 九九九久久国产免费| 欧美激情国产高清| 国产精品久久久久久亚洲影视| 国产精品久久久久久久久久久久久久| 亚洲最大的成人网| 亚洲精品成人网| 91中文字幕在线观看| 国产精品夫妻激情| 国产精品一区电影| 欧美在线激情视频| 精品国偷自产在线| 成人欧美一区二区三区在线湿哒哒| 国产做受69高潮| 亚洲成人精品久久久| 51久久精品夜色国产麻豆| 日韩av最新在线观看| 伊人伊人伊人久久| 国产亚洲精品美女| 成人免费xxxxx在线观看| 欧美人在线观看| 国产小视频91| 2024亚洲男人天堂| 一本色道久久88精品综合| 欧美午夜性色大片在线观看| 中文字幕在线看视频国产欧美在线看完整| 国产精品av在线| 亚洲视频电影图片偷拍一区| 国产精品视频中文字幕91| 久久综合网hezyo| 亚洲美女又黄又爽在线观看| 国产欧美日韩丝袜精品一区| 成人在线视频网站| 亚洲天天在线日亚洲洲精| 国产亚洲精品美女久久久| 精品亚洲精品福利线在观看| 久久成人av网站| 精品美女国产在线| 欧美—级a级欧美特级ar全黄| 欧美激情性做爰免费视频| 91亚洲国产成人精品性色| 欧美一性一乱一交一视频| 午夜精品久久久久久久99黑人| 欧美极品xxxx| 欧美日韩国产综合新一区| 久久99久久久久久久噜噜| 热草久综合在线| 精品成人在线视频| 欧美激情综合色| 国产91色在线|| 91超碰中文字幕久久精品| 97久久伊人激情网| 国产91网红主播在线观看| 久久av在线播放| 精品无人区乱码1区2区3区在线| 久久久电影免费观看完整版| 国产精品直播网红| 亚洲欧美国产va在线影院| 麻豆国产va免费精品高清在线| 欧美一区第一页| 亚洲一区二区黄| 日韩精品欧美国产精品忘忧草| 97久久久免费福利网址| **欧美日韩vr在线| 亚洲男人第一网站| 国产欧美一区二区三区久久人妖| 亚洲第一网中文字幕| 国产精品激情av电影在线观看| 国产精品视频一区国模私拍| 亚洲开心激情网| 精品视频在线导航| 国产精品国产三级国产aⅴ浪潮| 亚洲专区国产精品| 性夜试看影院91社区|