1. 程式人生 > >javaweb實現檔案下載(包含.txt檔案等預設在瀏覽器中開啟的檔案)

javaweb實現檔案下載(包含.txt檔案等預設在瀏覽器中開啟的檔案)

檔案下載 

剛開始研究檔案下載是找有關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");//設定檔案型別

未完待續。。。。