在使用该文件获得响应(成功ajax方法)后,我在浏览器中获取excel文件和打开下载窗口时遇到问题.我有合适的Content-Type and Content-Disposition headers,我尝试在js中使用Blob而我无法实现我想要的 - 简单的文件下载.
我完成了我的ajax的几个版本,其中一个版本在下面.我开发了ajax,它返回excel文件,因为它已损坏而无法正常打开(尽管扩展名为.xlsx).
也许问题是Blob构造函数中使用的不适当的数据类型?
我尝试使用"xhr.response"而不是成功方法参数中的"data",但它也不起作用.我在Chrome中的开发者工具中检查了响应标题,并且设置正确.
重要的是 - 在服务器端创建的所有excel工作簿都是正确的,因为它在先前版本中工作时数据是在URL中发送的,而不是在ajax发布中.
Java/Spring服务器端的控制器方法如下:
response.reset();
response.setContentType("application/vnd.ms-excel");
response.addHeader("Content-Disposition","attachment;filename=\"" + className + " " + title + ".xlsx\"");
try (ServletOutputStream output = response.getOutputStream()){
workbook.write(output);
output.flush();
} catch (Exception e) {
throw new RuntimeException(e);
}
Run Code Online (Sandbox Code Playgroud)
我的Ajax下载文件并打开下载窗口:
$.ajax({
url: myUrl,
type: 'POST',
data: myData,
success: function(data, status, xhr) {
var contentType = 'application/vnd.ms-excel';
var filename = "";
var disposition = xhr.getResponseHeader('Content-Disposition');
if (disposition && disposition.indexOf('attachment') !== -1) {
var filenameRegex = …Run Code Online (Sandbox Code Playgroud)