gpt4 book ai didi

javascript - 通过 Spring MVC 使用 ajax() POST 请求下载文件

转载 作者:可可西里 更新时间:2023-11-01 02:30:14 25 4
gpt4 key购买 nike

我尝试下载一个文件。该操作由 ajax() POST 请求触发。请求以 JSON 格式向 Controller 发送数据。 Controller 生成文件(字节)并将其发回。

JavaScript:

function getLicenseFile() {
$.ajax({
type: 'POST',
url: '<%=request.getContextPath()%>/licenses/rest/downloadLicenseFile',
dataType: 'json',
contentType: 'application/json;charset=UTF-8',
data: ko.mapping.toJSON(licenseModel),
success: function (data) {
console.log("in sucess")
},
error:function (xhr, ajaxOptions, thrownError){
console.log("in error")
}
});
}

Controller :

@RequestMapping(value = "/licenses/rest/downloadLicenseFile", method = RequestMethod.POST)
@ResponseStatus(value=HttpStatus.OK)
@ResponseBody
public void createLicenseFile(@Valid @RequestBody License license, HttpServletResponse response) throws Exception {

logger.debug("Contoller License in: "+ license);

byte[] licensedata = licenseEncodeDefaultService.createLicenseFile(license);
logger.debug("licenseData: " + new String(licensedata));

response.setHeader("Content-Disposition", "attachment; filename=\"" + license.getCustomer() + ".license\"");
response.getOutputStream().write(licensedata);
response.flushBuffer();
}


问题

  • 浏览器应该打开一个下载框,但没有打开
  • 响应在 error: ajax 函数部分处理(但 HTTP 状态为 OK)

那么我做错了什么或者正确的方法是什么?

最佳答案

只需发送文件的 URL 作为响应,然后在您的 success 回调中“访问”它。

function getLicenseFile() {
$.ajax({
type: 'POST',
url: '<%=request.getContextPath()%>/licenses/rest/downloadLicenseFile',
dataType: 'json',
contentType: 'application/json;charset=UTF-8',
data: ko.mapping.toJSON(licenseModel),
success: function (data) {
window.open(data.fileUrl);
// or window.location.href = data.fileUrl;
},
error:function (xhr, ajaxOptions, thrownError) {
console.log("in error");
}
});
}

data.fileUrl 应该由服务器设置响应,告诉客户端从哪里获取文件。

所以你的服务器将发送一个类似 JSON 的响应

{
"fileUrl": "http://mysite.com/files/0123456789"
}

关于javascript - 通过 Spring MVC 使用 ajax() POST 请求下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13519058/

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