【发布时间】:2017-07-18 12:47:59
【问题描述】:
我正在尝试触发文件下载,但在 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 中,响应打印在屏幕上(加载在同一页面上)。
注意:我已经尝试过 SO 上建议的其他方法,但每种方法都有自己的问题。
更新: 在响应标头中,我看到 Content-Disposition 设置为内联而不是附件。为什么会这样?
我做错了什么?
【问题讨论】:
-
您可以使用 Safari 中的网络检查器获取请求和响应标头,并将它们添加到您的问题中吗?
-
将
Content-Type: text/csv更改为Content-Type: application/octet-stream对您有什么帮助吗? -
它下载但没有文件扩展名和文件名(在所有浏览器中)
-
您安装了 MS Office 吗?您使用的是什么操作系统?
-
是的。 Mac 操作系统....
标签: javascript java spring spring-mvc safari