问题描述
我必须执行 jquery ajax 调用才能下载文件。 url 指的是返回 HttpResponseMessage 的控制器方法,这方面没有任何问题(StatusCode 200,文件字节,一切正常)。
这里是ajax调用
$.ajax({
url: self.downloadAttachmentUrl,type: 'GET',cache: false,dataType: 'binary',data: {
fileKey: fileKey,userId: userId
},xhrFields: {
responseType: 'arraybuffer'
},beforeSend: function (xhr) {
Object.keys(customAjaxHeaders).forEach(function (headerName) {
var headerValue = customAjaxHeaders[headerName];
xhr.setRequestHeader(headerName,headerValue);
});
},success: function (data,textStatus,jqXHR) {
var fileName = self.getFileNameFromHeaders(jqXHR.getAllResponseHeaders());
var blob = new Blob([data],{ type: "application/octetstream" });
self.downloadFile(blob,fileName)
},error: function (jqXHR,message) {
console.error(textStatus,message);
}
})*/
DOMException: Failed to read the 'responseText' property from 'XMLHttpRequest': The value is only accessible if the object's 'responseType' is '' or 'text' (was 'arraybuffer').
我注意到如果我使用“本机 ajax”(所以没有 jQuery),我不会收到这个错误,但我不想使用它来保证项目的一致性(这很好密集)。
var headers = new Headers();
Object.keys(customAjaxHeaders).forEach(function (headerName) {
var headerValue = customAjaxHeaders[headerName];
headers.append(headerName,headerValue)
});
var init = {
method: 'GET',headers: headers
};
var fetchUrl = self.downloadAttachmentUrl + '?' + $.param({ fileKey: fileKey,userId: userId })
fetch(fetchUrl,init)
.then(async response => {
var blob = await response.blob();
var fileName = self.getFileNameFromHeaders(response.headers.get('Content-disposition'));
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.setAttribute('download',fileName);
link.click();
})
});
有没有办法让 jQuery ajax 调用正常工作?感谢您的帮助。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)