2

我有一些 xml 文件作为字符串存储在我的数据库和基于 scala+spring 的后端使用这个控制器:

@RequestMapping(value = Array("/download"), method = Array(RequestMethod.GET))
def downloadFile(@RequestParam filename: String, //some more params
                 response: HttpServletResponse) = {
  val fileContent = // some logic here, returns file content as String
  response.setContentType("application/xml")
  response.setHeader("Content-Disposition", s"attachment;filename=$filename")
  response.setStatus(HttpServletResponse.SC_OK)
  response.getOutputStream.write(fileContent.getBytes)
  response.flushBuffer()
}

我也有这个脚本:

$.ajax({
     type: "GET",
     url: url,
     data: {
         filename: filename //and some more params
     }
})

然后我向服务器发送 HTTP 请求,得到正确的 HTTP 响应,然后什么也没有发生。我从浏览器日志中获得的所有信息是响应在正文和标题中有文件内容,但下载永远不会开始。

我究竟做错了什么?

我看到了这些 SO Q&A 但他们根本没有帮助我:

使用 ajax 请求下载文件

从弹簧控制器下载文件

UPD1:也试过这个,没有结果。

4

1 回答 1

0

这就是我制作文件以从服务器下载的方式。

    output = (byte[]) processedDocumentObject;
    HttpHeaders responseHeaders = new HttpHeaders();
    responseHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    responseHeaders.setContentDispositionFormData("attachment", "file.xml");
    HttpEntity<byte[]> fileEntity = new HttpEntity<byte[]>(output,responseHeaders);
    return fileEntity;

然而,这是在 java 中,而 HttpHeaders 是org.springframework.http.HttpHeaders,而 HttpEntity 是org.springframework.http.HttpEntity<byte[]>

此外,您最初需要将字符串转换为字节数组。

于 2016-02-12T09:34:27.757 回答