使用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"); //解决下载文件名乱码
纯手打,欢迎拍砖。