如何触发javascript请求从后端下载文件

时间:2019-07-18 06:55:08

标签: javascript flask

我有一个使用flask的Web服务器。

要从webServer下载文件,我需要以下代码:

@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

如果我在浏览器中输入“ http://localhost/api/v1_2/download_file3”,则文件已下载-很好!

但是我需要以编程方式通过javascript从客户端触发下载。 当我点击一个按钮时,我到达下面的代码,该代码触发与上面相同的网址,

this.downloadFile3 = function (layer, zipFilename) {
    let queryUrl = 'http://localhost/api/v1_2/download_file3';
    fetch(queryUrl, {
        method: 'get'
    })
        .then(function(response) {
            return response;
        })
        .catch((err) => {
            console.error('error from api/v1_2/download_file3', err);
            reject(false);
        });
};

但是当通过javascript触发时,该文件未下载。

我在做什么错了?

谢谢

阿维

1 个答案:

答案 0 :(得分:0)

获取一个Blob,然后就可以使用

function downloadFile(blob, fileName)
{
    var a = document.createElement("a");
    document.body.appendChild(a);
    a.style = "display: none";

    var url = window.URL.createObjectURL(blob);
    a.href = url;
    a.download = fileName;
    a.click();
    window.URL.revokeObjectURL(url);
}

或使用jquery

$.ajax({ 
    url: requestUrl,
    processData: false,
    dataType: 'datatype-here'
}).done(function(data) {
    var blob = new Blob([data], { type: "image/png; encoding=utf8" });
    saveData(blob, 'filename.png');    
});