解决IE浏览器不支持Spring MVC 文件下载的问题
2018-03-10 13:21:56
1295 次阅读
0 个评论
问题代码(IE浏览器不能正常下载,其他浏览器正常)
/**
* 下载
* @return
* @throws HttpErrorException
*/
@RequestMapping(value="/download", method=RequestMethod.GET)
public ResponseEntity<byte[]> download() throws HttpErrorException {
String zipFile = "C:\\test.zip";
File downloadZip = new File(zipFile);
HttpHeaders headers = new HttpHeaders();
headers.setContentDispositionFormData("attachment", downloadZip.getName());
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
ResponseEntity<byte[]> responseEntity;
try {
responseEntity = new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(downloadZip), headers, HttpStatus.OK);
} catch (IOException e) {
modelMsg = "读取文件错误: " + downloadZip.getPath();
throw new HttpErrorException(modelMsg, HttpStatus.INTERNAL_SERVER_ERROR.value());
}
return responseEntity;
}
经过调试,发现问题出在下面这行上:
headers.setContentDispositionFormData("attachment", downloadZip.getName());
这行代码的作用是用于告诉浏览器如何显示本次请求响应所附加的文件,“attachment”表示是让浏览器以下载附件的形式打开文件。通过调试打印出其设置内容,得到文本如下:
[form-data; name="attachment"; filename="test.zip"]
问题出现在“form-data”字符,此标识应该是在文件上传时才使用(上传文件时一般都将文件放置在表单域中),将问题行代码更换成下述代码,问题便可得到解决:
headers.set(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + downloadZip.getName() + "\"");
00