使用JavaScript保存Blob始终会保存一个空文件

时间:2019-12-11 23:54:32

标签: javascript firefox blob filesaver.js

以下代码中最有趣的部分是,当服务器以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。

0 个答案:

没有答案