以下代码中最有趣的部分是,当服务器以localhost身份运行时,它可以完美运行,但是当服务器位于远程计算机上时,它就不能正常运行。接收到的Blob大小是准确的,但是使用FileSaver.saveAs将Blob保存到文件中会生成一个空文件。无法找出问题出在哪里?
function downloadResultsZip(id, reqDelay) {
let uri = `https://etc...`;
let delay = 0;
let timerId = setTimeout(function request() {
fetch(uri).then(function (response) {
if (response.status === 202) { // Request accepted.
delay = reqDelay;
timerId = setTimeout(request, delay);
} else if (response.status === 200) { // OK
let zipFileName = response.headers.get('Content-Disposition').match(/.*"(.*)".*/)[1];
//
response.blob().then(function (zipBlob) {
clearTimeout(timerId);
//alert("zipBlob size = " + zipBlob.size); // ok, accurate
FileSaver.saveAs(zipBlob, zipFileName); // Problem!
});
} else {
if (response.status === 400) { // Bad Request
alert('Server responded with an error: \"input parameters are not valid\".');
} else {
alert('Error! Server calculation has failed.');
}
clearTimeout(timerId);
}
});
}, delay);
}
第一次编辑。
我刚刚发现源代码正确,但是仅在Firefox 71中无法正常工作。在Chrome 79和Edge 44(EdgeHTML 18)中可以正常工作。由于我是JS的新手,所以我想知道如何解决此问题。我还尝试了基本方法,即创建指向URI服务的tag和href属性,然后单击该链接,但是我成功地仅保存了大约1 KB的数据,而不是预期的5.3 MB。