使用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"); //解決下載文件名亂碼
純手打,歡迎拍磚。