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

相关文章
相关标签/搜索