是否可以通过Javascript从后端下载文件,而不必先加载到内存中?

时间:2019-07-19 21:28:57

标签: javascript download

我有一个使用flask的Web服务器。 后端中的以下代码支持文件下载:

@images_api_blueprint.route('/api/v1_2/download_file3', methods=['GET'])
def download_file3():
    zipFullFileName1 = './foo.zip'
    response1 = send_file(zipFullFileName1, as_attachment=True)
    return response1

我可以通过两种方式下载文件:

  1. 直接从浏览器中-通过在浏览器中输入“ http://localhost/api/v1_2/download_file3

  2. 从我的客户端通过javascript以编程方式-使用以下代码:

function downloadFile3() {
    let urlToSend = 'http://localhost/download_zip_file2';
     let req = new XMLHttpRequest();
     req.open("GET", urlToSend, true);
     req.responseType = "blob";
     req.onload = function (event) {
         let blob = req.response;
         let fileName = 'zippedFiles.zip';
         let link=document.createElement('a');
         link.href=window.URL.createObjectURL(blob);
         link.download=fileName;
         link.click();
     };
     req.send();
}

在两种情况下都可以下载文件,但我担心Javascript用例。

javascript代码使用blob和createObjectURL(我假设是在将blob下载到文件系统之前在内存中创建的),这引发了以下问题:

  • 为什么在将文件写入文件系统之前需要读取blob并在内存中创建对象URL? (即,为什么Javascript无法像上述情况1那样直接将文件通过管道传输到文件系统?)
  • 如果文件很大,并且客户端没有太多内存,该怎么办?

谢谢

阿维

0 个答案:

没有答案
相关问题