我有一个写入 GET 请求响应正文的服务。写入的数据可以是 PDF 文件或 XLSX 文件。
我的问题是,当我使用 Google Chrome 浏览器发出请求时,文件会被下载。但是,当我使用 postman 进行相同的调用时,我只在响应正文中收到一些乱码(我猜响应是压缩字节),并且无法下载文件。
这里我展示了在向 Controller 发出请求后下载文件的方法:
我的 Ajax 调用:
$.ajax({
url: request_url,
type: "POST",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(searchCriteria),
success: function (response) {
swal("SWEET");
},
error: function (err) {
swal(JSON.stringify(err));
}
});
在服务中我设置响应内容和类型如下:
response.setContentType(contentType);
// Assign the byte stream's size
response.setContentLength(baos.size());
//Write to response stream
Writer.write(response, baos);
我通过 Ajax 调用发出请求,并得到与 postman 相同的响应,有没有办法下载这些字节返回到 Ajax?
谢谢。
最佳答案
我发现了问题所在,当我从 Google Chrome 发出请求时,该请求是一个定向到不同 Controller 的 GET 请求。另一方面,使用 Postman 发出的请求是指向不同 Controller 的 POST 请求。
鉴于响应 header 中提到了 GET 请求响应的内容,可以将其作为文件下载。
但是 POST 的内容却没有。我相信,因为正如 Archer 的评论中提到的,POST 并不意味着触发任何下载。
关于javascript - 从响应正文下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58376023/