Java經過HttpServletResponse下載文件並避免文件名亂碼

使用Java下載文件方式很經常使用,廢話很少說,先說明一下狀況。java

場景:經過程序(或者定時任務)生成文件到服務器本地磁盤,數據庫中保存文件生成信息(非重點),經過網頁一連接下載服務器本地的文件。數據庫

開始動手,步驟以下:服務器

1. 根據id查詢出數據庫文件生成信息(非重點)app

2. 獲取服務器的本地磁盤文件file對象ui

3. 設置HttpServletResponse屬性編碼

4. 得到文件輸入流spa

5. 文件輸入流和輸出流轉換.net

6. 文件流輸出excel

完整代碼以下:code

/**
     * 下載
     * @author 小風
     * @return 流
	 * @throws IOException 
     */
    @RequestMapping(value = "download", method = RequestMethod.GET)
    public void download(HttpServletResponse response,@RequestParam(value = "id", required = true) String id) throws IOException {
        if (null != id && !"".equals(id)) {
        	OrderExcel o = orderExcelService.selectOrderExportById(id);
        	if (o != null) {
        		File file = new File(Common.ORDER_EXCEL_EXPORT_SAVE_DIR_PATH + o.getId().trim()+".xls");
            	String fileName = o.getFileName();
            	response.setContentType("application/octet-stream");
                response.setHeader("Content-Disposition", "attachment;filename="+fileName);
                FileInputStream fis = new FileInputStream(file);
                OutputStream os = response.getOutputStream();
                byte[] b = new byte[1024];
                int len = 0;
                while((len = fis.read(b))!=-1){
                	os.write(b, 0, len);
                }
                os.flush();
                os.close();
                fis.close();
        	}
        }
    }

上述代碼能實現excel文件的下載,數據正確,可是當文件名存在中文的時候,下載的文件名就存在了錯誤

解決方案爲,文件名進行URLEncoder.encode編碼,解決中文亂碼問題

代碼以下:

fileName = URLEncoder.encode(o.getFileName(), "UTF-8"); //解決下載文件名亂碼

純手打,歡迎拍磚。

轉載請指明出處:http://my.oschina.net/u/1991646/blog/730889

相關文章
相關標籤/搜索