我正在尝试触发文件下载,但在Safari浏览器上遇到了问题(在FireFox和Chrome浏览器上正常工作)。
这是我的Java代码:
@RequestMapping(method = RequestMethod.GET, produces = "text/csv")
@ResponseBody
public String getReports(
final HttpServletResponse response,
final @RequestParam String data) throws ParseException {
response.setHeader("Content-type", "text/csv; charset=utf-8");
response.setHeader("Content-Disposition","attachment; filename='view.csv'");
String csv = exportCurrentService.extractMatrix(data);
response.setContentLength(csv.length());
return csv;
}
这是我的客户端代码:
downloadURI(url, name) {
const a = document.createElement('a');
a.href = url;
a.download = name;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
}
在Safari中,响应会被打印在屏幕上(在同一页中加载)。
注意:我已经尝试了stackoverflow上提供的其他方法,但每种方法都有它自己的问题。
更新: 在响应头中,我看到Content-Disposition被设置为inline而不是attachment。为什么会这样?
我做错了什么?