JavaScript

超轻量级php框架startmvc

vue element中axios下载文件(后端Python)

更新时间:2020-08-25 23:06:01 作者:startmvc
•axios接受文件流,需要设置{responseType:'arraybuffer'}axios.post(apiUrl,formdata,{responseType:'arraybuf

•axios 接受文件流,需要设置 {responseType:'arraybuffer'}


axios.post(
 apiUrl,
 formdata, 
 {responseType:'arraybuffer'}
).then(res=> {
  if (res.status === 200) {
   let blob = new Blob([res.data], {
    type: res.headers['content-type']
    });

    const fileName = res.headers['content-disposition'];
   const title = fileName && (fileName.indexOf('filename=') !== -1) ? fileName.split('=')[1] : 'download';

    require('script-loader!file-saver');
   saveAs(blob, title);
} 
})
.catch();

注: axios 中 response 表示服务器响应的数据类型,可以是 arraybuffer , blob, document , json , text , stream . 默认为: json

•后端发送文件:Python


from flask import send_from_directory
@admin_bp.route('/tasksothers/download', methods=["GET", "POST"])
@auth.login_required
def api_tasksothers_download():
 root_path = ''
 src_name = "a.sql"
 upload_path = os.path.join(root_path, src_name)
 print("upload_path =", upload_path)
 if os.path.isfile(upload_path):
 response = send_from_directory(root_path, src_name, as_attachment=True)
 print("response: ",response)

 response.headers["Access-Control-Expose-Headers"] = "Content-disposition"
 print("response: ", response.headers)
 return response 

注: 如果 response.header 中没有添加  Access-Control-Expose-Headers 这个参数(代表:服务器允许浏览器访问的头(headers)的白名单),vue中就无法获取 content-disposition,即 res.headers['content-disposition'];无法找到

总结

以上所述是小编给大家给大家介绍的vue element中axios下载文件(后端Python),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

vue element vue 下载文件 vue axios