javaweb實現檔案下載(包含.txt檔案等預設在瀏覽器中開啟的檔案)
阿新 • • 發佈:2018-12-26
檔案下載
剛開始研究檔案下載是找有關js的方法,找了好多發現對於.txt、.xls等檔案在瀏覽器中還是開啟,或者就是跨域問題。後來通過查詢資料發現可以在後臺對http相應頭設定引數,而且實現起來也不復雜。現總結如下:
文章參考 《javaweb檔案下載》、《根據網路url 實現web下載圖片 java》、《Java檔案下載及web檔案的contentType大全》
前端程式碼:
function downloadLog(logName){
location.href=basePath + "/demp/common/downloadDeviceLog.do";
}
後臺程式碼:
import org.apache.commons.io.IOUtils; @RequestMapping({"/demp/common/downloadDeviceLog.do"}) @ResponseBody public void downloadDeviceLog(HttpServletRequest request, HttpServletResponse response) throws Exception { String logUrl = "https://**/2018-11-20.txt"; try { String [] logUrlArray = logUrl.split("/"); String fileName = logUrlArray[logUrlArray.length-1]; URL url = new URL (logUrl); URLConnection uc = url.openConnection(); response.setContentType("application/octet-stream");//設定檔案型別 response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); response.setHeader("Content-Length", String.valueOf(uc.getContentLength())); ServletOutputStream out = response.getOutputStream(); IOUtils.copy(uc.getInputStream(), out); } catch (Exception e) { e.printStackTrace(); } }
注:
1、其中關鍵的一句是給響應頭設定“content-disposition”屬性,關於它的介紹可參考文章《Content-Disposition 響應頭,設定檔案在瀏覽器開啟還是下載》
2、contenType也可以設定成專門針對某種檔案型別的,比如文中是.txt型別,就可以這樣設定:
response.setContentType("text/plain");//設定檔案型別
未完待續。。。。