我试图触发文件下载,并且我在Safari上遇到问题(FireFox & Chrome按预期工作)。
这里是我的Java代码:下载文件Safari
@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的响应打印屏幕(加载在同一页上)上。
注意:我尝试了其他方法建议SO,但每个都有它自己的问题。
更新:在响应标题中,我看到Content-Disposition被设置为内联而不是附件。为什么发生这种情况?
我做错了什么?
您可以在Safari中使用Web检查器来获取请求和响应标题,并将它们添加到您的问题中? – Stobor
是否将'Content-Type:text/csv'改为'Content-Type:application/octet-stream'为你做任何事情? – d3L
它下载但没有文件扩展名和文件名(在所有浏览器中) – vlio20