我有一个使用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触发时,该文件未下载。
我在做什么错了?
谢谢
阿维
答案 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');
});