对服务器的API调用返回了一个Content-Disposition
格式的zip文件,我正在使用FileSaver的saveAs保存该文件。
this.ajax.raw(requestUrl, {
dataType: 'binary',
xhr: () => {
const myXhr = $.ajaxSettings.xhr()
myXhr.responseType = 'blob'
return myXhr
}
}).then((response) => {
this.downloadSuccess(response, minTimeString, maxTimeString, downloadCompletedMessage)
}).catch((e) => {
this.downloadError(e)
})
downloadSuccess (response, minTime, maxTime, downloadCompletedMessage) {
const filename = (response.jqXHR.getResponseHeader('Content-Disposition').split('"')[1])
saveAs(response.payload, filename, 'application/zip')
这对于小文件很好,但如果文件大于2Gb,则会失败(文件下载成功,但保存的文件仅为1Kb)。
在我的研究过程中,我看到浏览器可以在没有FileSaver的情况下下载文件,如果响应有Content-Disposition
,这在我的情况下是正确的。但我不知道该怎么做。
我需要以不同的方式使用请求吗?
1条答案
按热度按时间jmo0nnb31#
来自文档:
Content-Disposition附件头是从浏览器下载文件的最佳首选方式。它具有更好的跨浏览器兼容性,没有任何内存限制,并且不需要任何JavaScript。
下载文件不需要
ajax request
。仅确保服务器添加Content-Disposition
标头并提供下载链接。如果您还可以使用HTML5中的锚下载属性。
使浏览器将链接的URL视为下载。