Spring 实现 文件下载 (简洁,解决文件名乱码)

使用Spring 实现文件下载功能 
页面,  JSP 页面的编码设置为UTF-8

<td><a href="XXX/download?fileName=${li.url}">${li.url }</a></td>
<a href="XXX/download?fileName=Spring从入门到放弃.pdf">Spring从入门到放弃.pdf</a> <!-- 这里就是中文 -->

上面代码就是在一个JSP中,而JSP 就是一个java 类,所以上面中文编码也是UTF-8  ,而 java 类 在 网络上传输为编码格式 为 iso8859-1 
XXX 代表Controller 类上的@RequestMapping 值

@RequestMapping("download")
public ResponseEntity<byte[]> download(HttpServletRequest request,String fileName) throws IOException {
	String dir = new File(request.getServletContext().getRealPath("/")).getParentFile().getParent();
	dir = String.format("%s%sAAA%sBBB%s", dir, File.separator, File.separator, File.separator);  // dir就是一个目录(这里是我项目中的目录), win下测试你可以改成 "E:\\hello\\java"
	String dfileName = new String(fileName.getBytes("iso8859-1"),"UTF-8"); 			
	File file = new File(dir,dfileName); // 要下载的文件为 e:/hello/java/Spring从入门到放弃
	HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
	headers.setContentDispositionFormData("attachment",fileName); //返回的文件名(其实这里文件名是乱码)
	return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED); 
}

fileName 为前端JSP中传过来的值 它在JSP中编码为 utf-8 ,网络传输又把它编码为 iso8859-1 ,所以此处是乱码。
这时你用这个文件名访问 文件系统 肯定会报找不到文件异常, 所以需要转码。

效果图:



以上纯属瞎猜!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值