javascript - 下载文件

标签 javascript java spring spring-mvc safari

我正在尝试触发文件下载,但在 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 上建议的其他方法,但每个方法都有其自身的问题。

更新:在响应 header 中,我看到 Content-Disposition 设置为内联而不是附件。为什么会这样?

我做错了什么?

最佳答案

尝试不使用 @ResponseBody 并使用 produces = MediaType.APPLICATION_JSON_UTF8_VALUE

关于javascript - 下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42493661/

相关文章:

javascript - 尝试使用 jQuery .post() 在表单 POST 后重定向用户

javascript - 无法将 php 密码字段上传到 phpmyAdmin

java - 无法对 JPQL 中的列进行 ORDER BY

java - 检查网络状态

spring - 我在 eclipse 中使用 Jdk 14,maven java 版本的 POM.XML 文件是什么

java - 注释@Transactional。如何回滚?

spring - 如何在 Spring LDAP 中配置 SSL?

javascript - 如何在 JavaScript 中的嵌入 HTML 中创建 if 语句以显示 CSS 类

java - 查找二维数组的最大值和最小值

javascript - 访问 React 组件的 props