gpt4 book ai didi

javascript - 通过ajax下载文件

转载 作者:行者123 更新时间:2023-12-01 00:51:07 26 4
gpt4 key购买 nike

我需要通过ajax从服务器下载文件。问题是该文件未存储在服务器上。我的基于 java 的后端自动从请求参数生成文件并在响应正文中返回它:

  @RequestMapping(value = "/download", method = RequestMethod.GET)
public void download(@RequestParam String description, @RequestParam Long logId, HttpServletResponse response) {
try {
InputStream fileContent = // getting file as byte stream
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader("Content-Disposition", "attachment; filename=file.zip");
ServletOutputStream responseOutputStream = response.getOutputStream();
org.apache.commons.io.IOUtils.copy(fileContent, responseOutputStream);
response.flushBuffer();
} catch (IOException e) {
logger.error("Attempt to download file failed", e);
}
}

所以我需要处理它并允许用户下载文件。我的客户端包含这个:

$.ajax({
type: "GET",
url: "/download",
data: {
description: "test",
logId: 123
},
success: function(data) {
var blob = new Blob([data]);
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = "file.zip";
link.click();
}
})

Controller 返回文件,但随后什么也没有发生。我究竟做错了什么?

最佳答案

不要进行 AJAX 调用,而是将窗口的 href 设置为指向下载文件的 URL。然后将响应的内容类型更改为 application/x-download 并将响应的 header 设置为 Content-disposition:

response.setContentType("application/x-download");
response.setHeader("Content-disposition", "attachment; filename=" + fileName);
response.flushBuffer();

function download(fileName) {
window.location.href = "/download?description=test&logId=123";
}

此外,请查看 this SO post它解决了与您遇到的问题类似的问题。

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com