java如何從linux服務(wù)器下載文件
最近做項目,使用的技術(shù)較老,前端用的架構(gòu)是jsp,主要技術(shù)是jquery、js、css、html等,后端用到的主要是springmvc、存儲過程等。
下面是一個文件下載的簡單實現(xiàn)。主要是客戶在瀏覽器點擊一個pdf文件,進(jìn)行下載。改文件存在于公司的服務(wù)器上。
一、前端代碼
1、html代碼
<div class="border-gb-title">項目文件</div> <div class="grey-card jus-c ptb30 flex"> <div class="tc mlr50 cupointer" onclick="getProjectFiles(1)"><img src="/res/images/file.png"> <div class="mt5 fs16">合同</div> </div> <div class="tc mlr50 cupointer" onclick="getProjectFiles(2)"><img src="/res/images/file.png"> <div class="mt5 fs16">計劃說明書</div> </div> <div class="tc mlr50 cupointer" onclick="getProjectFiles(3)"><img src="/res/images/file.png"> <div class="mt5 fs16">風(fēng)險說明書</div> </div> <div class="tc mlr50 cupointer" onclick="getProjectFiles(6)"><img src="/res/images/file.png"> <div class="mt5 fs16">服務(wù)協(xié)議</div> </div> </div>
2、js代碼
//獲取文件,主要是從數(shù)據(jù)庫獲取到:文件名、文件路徑 function getProjectFiles(type) { var fileParam = { pageNo: 1, pageSize: 10, xmId: ${detail[0]["項目ID"]}, cxlx: type, }; $.ajax({ url: "/prod/getProjectFiles", type: "POST", data: fileParam, dataType: "JSON", success: function (ret) { if (ret && ret['code'] > 0) { debugger //渲染界面 var dataList = ret['list']; download(dataList[0]["附件名"],dataList[0]["附件路徑"]); } } }) } //下載文件,調(diào)用后端接口 function download(fileName,filePath){ window.open("/downloadTwo?fileName="+encodeURI(fileName)+"&downUrl="+filePath); return ; }
3、css樣式
前端的所有樣式都是使用layui架構(gòu)的。
二、后臺代碼
1、獲取文件
主要是,調(diào)用存儲過程,去數(shù)據(jù)庫獲取文件名和文件路徑,后面用于下載。
/** * 獲取項目文件 * I_CXLX IN NUMBER, --查詢類型 1|信托合同 2|信托計劃說明書3|認(rèn)購風(fēng)險說明書 5|隱私協(xié)議|6用戶服務(wù)協(xié)議 * I_XSXM IN NUMBER --發(fā)行方案id * @param request * @param response * @param modelMap * @return */ @RequestMapping(value = "/getProjectFiles",method = RequestMethod.POST) @ResponseBody public DataResultSet getProjectFiles(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap){ int pageNo = ParamUtils.getInt(request, "pageNo", 1); // 頁碼 int pageSize = ParamUtils.getInt(request, "pageSize", 10); // 取得顯示條數(shù) String cxlx = ParamUtils.getString(request, "cxlx", ""); // 查查詢類型 1|信托合同 2|信托計劃說明書3|認(rèn)購風(fēng)險說明書 5|隱私協(xié)議|6用戶服務(wù)協(xié)議 String xmId = ParamUtils.getString(request, "xmId", ""); //發(fā)行方案id DataResultSet productHistory = prodService.getProjectFiles(pageNo,pageSize,cxlx,xmId); return productHistory; }
2、開始下載
/** * 附件下載 * * @param request * @param response */ @RequestMapping("/downloadTwo") public void downloadFileTwo( HttpServletRequest request, HttpServletResponse response) { String fileName = request.getParameter("fileName"); String downUrl = request.getParameter("downUrl"); goToDownload(request, response, downUrl, fileName); } /** * 下載 * * @param request * @param response * @param downUrl 下載的路徑 * @param fjmc 下載文件的名稱 */ private void goToDownload(HttpServletRequest request, HttpServletResponse response, String downUrl, String fjmc) { response.setCharacterEncoding("UTF-8"); response.setContentType("application/x-msdownload"); try { String encodenickname = URLEncoder.encode(fjmc,"UTF-8");//轉(zhuǎn)Unicode不然ie會亂碼 response.setHeader("Content-Disposition", "attachment;fileName=" + new String(encodenickname.getBytes("UTF-8"), "ISO8859-1")); //這里注掉的代碼是本地測試的 // String path = request.getSession().getServletContext().getRealPath("/"); // String ATTACH_PATH= AppConfig.getInstance().getProperty("attach.base",""); // if (StringUtils.isNotEmpty(ATTACH_PATH)) { // path = ATTACH_PATH; // } // logger.debug("=path===" + path); File file = new File( downUrl); if (!file.exists()) { response.sendError(404, "File not found!"); return; } long fileLength = file.length(); response.setHeader("Content-Length", String.valueOf(fileLength)); BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream()); byte[] buff = new byte[2048]; int bytesRead; while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) { bos.write(buff, 0, bytesRead); } bis.close(); bos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
三、效果
直接點擊文件圖片或者文件,就可以下載。
上面測試,是在谷歌瀏覽器,火狐,IE也測試過了,親測有效。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java使用正則表達(dá)式檢索、替換String中特定字符和正則表達(dá)式的一切
這篇文章主要給大家介紹了關(guān)于Java使用正則表達(dá)式檢索、替換String中特定字符和正則表達(dá)式的一切,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09springboot內(nèi)置的tomcat支持最大的并發(fā)量問題
這篇文章主要介紹了springboot內(nèi)置的tomcat支持最大的并發(fā)量問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03一行命令同時修改maven項目中多個module的版本號的方法
這篇文章主要介紹了一行命令同時修改maven項目中多個module的版本號的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-06-06