【问题标题】:How to let user download a file in ajax success method?如何让用户在ajax成功方法中下载文件?
【发布时间】:2013-11-14 22:39:54
【问题描述】:

我正在尝试让用户从服务器下载文件。 我在控制器中使用 ServletOutputStream(这里是代码)

@RequestMapping(value = "/get-backup-file", method = RequestMethod.GET)
@ResponseBody
public void getBackupFile(
    HttpServletRequest request, 
    HttpServletResponse response) throws MalformedURLException, IOException {

    File backupFile = new File("PATH_TO_FILE");        

    ServletOutputStream out = response.getOutputStream();

    response.setContentType("application/octet-stream");
    response.setContentLength((int)backupFile.length());
    response.setHeader("Content-Disposition", "attachment; filename=\"" + "database backup" + "\"");

    FileInputStream in = new FileInputStream(backupFile);
    byte[] buffer = new byte[4096];

    int length;
    while( (length = in.read(buffer) ) > 0) {
        out.write(buffer, 0, length);
    }
    in.close();
    out.flush();        
} 

我的客户端是这样的:

      $.ajax({
        url: 'URL_TOCONTROLLER_METHOD',
        contentType: "application/octet-stream; charset=utf-8",
        type: 'GET',
        success: function(data) {
            console.log(data);
        },
        error: function(data) {   
            console.log("error");
        }
    });

当我控制台记录数据时,它包含文件的内容,但我希望用户下载此文件,而不仅仅是打印。如何让用户将数据保存为文件?

【问题讨论】:

标签: java javascript file spring-mvc


【解决方案1】:

你必须发送文件存储的路径并打开它的成功功能,然后用户可以下载它

如果成功就是这样

{"status":"success","path":"temp\/Vehicle_Units_2013_11_04.xls"}

脚本是

success: function(msg)
                  {
                      if(msg.status=="session-expired")
                      {
                      window.location.replace("index.jsp");
                      }
                      if(msg.status=="success")
                      {
                          window.open(msg.path);
                      }

                  }

【讨论】:

  • 你是指文件的路径吗?我没有那个文件的网址。我不理解这个 ServletOutputStream 人员,这是做什么的?我应该以某种方式获取 ServletOutputStream 的 url 吗?我的主要问题是我不知道如何生成该文件的 url
  • 在您的服务器文件夹路径中将是 url。如果您没有 url 意味着用户将如何从服务器下载文件?
  • 那么用户将如何下载?
  • 文件在服务器机器中,但不在服务器文件夹中。它在服务器的本地资源中。
  • 给出成功的路径就是这样:-) 我们需要下载路径,否则不需要
【解决方案2】:

您不能使用 Ajax 强制下载文件。出于多种安全原因,Javascript 无法将文件保存到用户的计算机。解决方案是制作一个服务于下载页面的控制器,并让您的success 函数将window.location 更改为它。

success : function (data) {
    window.location = data;
}

假设 data 只是 URL。您可以使用 JSON 或任何其他可以从中检索链接的响应格式使其更加健壮。

【讨论】:

    【解决方案3】:

    不要使用 ajax。而是提供下载链接。

    <a href="URL_TOCONTROLLER_METHOD" download>Click To Download</a>
    

    【讨论】:

      猜你喜欢
      • 2019-05-03
      • 2016-05-11
      • 1970-01-01
      • 2020-08-27
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      • 2016-11-27
      相关资源
      最近更新 更多