python flask send_file上传文件,通过 jquery.js下载
后端路由
@app.route("/download_data_file", methods=['GET', 'POST'])
def download_data_file():
"""
浏览器下载文件接口
通过 flask 的 send_file 发送文件
"""
# 文件名(带扩展名)
info = json.loads(request.form.get('data'))
filename = info['filename']
filepath = info['filepath']
# print(filepath)
# 文件大小
fsize = os.path.getsize(filepath)
response = make_response(send_file(filepath, as_attachment=True))
response.headers["Content-Disposition"] = "attachment; filename={}".format(filename.encode().decode('latin-1'))
response.headers["Content-length"] = fsize
return response
前端 js
function download_data_btn_func(obj) {
let filename = test.txt;
let filepath = ./test.txt;
let params = {};
params['filepath'] = filepath
params['filename'] = filename
console.log(params)
// 注意:下载文件的ajax 请求 dataType不是'json'。去掉他,ajax会自动适配dataType 属性值
$.ajax({
url: '/download_data_file',
type: 'post',
data: { 'data': JSON.stringify(params) },
success: function (result) {
// 通过模拟一个a 元素下载文件
let blob = new Blob([result]);
let a = document.createElement('a');
let url = window.URL.createObjectURL(blob);
a.href = url;
a.download = filename;
a.click();
window.URL.revokeObjectURL(url);
},
error: function (result) {
console.log(result)
}
})
}