•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']; c 在Vue.js应用中,使用Element UI组件库时,与后端进行数据交互通常依赖于axios库。本篇文章将深入探讨如何在Vue Element中利用axios下载文件,后端使用Python Flask框架进行支持。 让我们理解axios在下载文件时的关键设置。在发送请求时,axios允许我们指定`responseType`来决定如何处理服务器返回的数据。对于下载文件,我们需要将`responseType`设置为`'arraybuffer'`,这样axios会接收文件内容作为ArrayBuffer类型的数据。ArrayBuffer是一种低级的数据类型,它存储原始二进制数据,可以用于创建Blob对象,进而用于文件下载。 下面是一个使用axios下载文件的Vue.js代码片段: ```javascript 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'; // 引入FileSaver.js库来保存文件 require('script-loader!file-saver'); saveAs(blob, title); } }).catch(); ``` 在这个示例中,我们检查了HTTP状态码是否为200,表明请求成功。然后,我们使用`new Blob()`创建一个Blob对象,其中包含从服务器接收到的ArrayBuffer数据,并根据响应头`content-type`设置文件类型。`content-disposition`头用于获取文件名,如果存在则保存,否则默认为'download'。我们使用FileSaver.js库(通过动态加载`script-loader!file-saver`实现)保存Blob对象到本地。 在后端,使用Python的Flask框架,我们可以创建一个路由来处理文件下载请求。以下是一个示例代码: ```python from flask import send_from_directory from flask_login import login_required @app.route('/tasksothers/download', methods=['GET', 'POST']) @login_required def api_tasksothers_download(): root_path = '' src_name = "a.sql" upload_path = os.path.join(root_path, src_name) if os.path.isfile(upload_path): # 设置响应,允许文件作为附件下载 response = send_from_directory(root_path, src_name, as_attachment=True) # 添加Access-Control-Expose-Headers,使Vue.js前端能获取content-disposition头 response.headers["Access-Control-Expose-Headers"] = "Content-disposition" return response ``` 这段Python代码中,`send_from_directory`函数用于从指定的目录发送文件。`as_attachment=True`参数确保文件作为附件提供下载。同时,为了使Vue.js能够访问`Content-disposition`头,我们需要在响应头中添加`Access-Control-Expose-Headers`,并将其值设置为`Content-disposition`。 总结一下,Vue Element结合axios下载文件主要涉及以下步骤: 1. 在axios请求中设置`responseType: 'arraybuffer'`,以接收文件内容。 2. 使用`Blob`对象构造文件,根据`content-type`设置文件类型。 3. 从`content-disposition`头中提取文件名,或者使用默认值。 4. 使用FileSaver.js库保存Blob对象到本地。 5. 后端使用Flask的`send_from_directory`发送文件,设置`as_attachment=True`和`Access-Control-Expose-Headers`。 这个流程适用于跨域请求,确保前端可以正确获取并保存文件。如果你在实际应用中遇到问题,记得检查网络请求和响应头,确保所有必要信息都已正确设置。



























- 粉丝: 10
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 基于天牛须(BAS)与NSGA-Ⅱ混合算法的交直流混合微电网多场景多目标优化调度附Matlab代码.rar
- 基于遗传算法的装配线平衡问题研究附Matlab代码.rar
- 基于栅格地图的无人机三维路径规划算法研究附Matlab代码.rar
- 基于正弦脉宽调制的单相光伏并网逆变器研究附Simulink仿真.rar
- 交替优化ADMM:受限问题、对抗网络和鲁棒模型研究附Matlab代码.rar
- 计及碳排放交易及多种需求响应的微网虚拟电厂日前优化调度附Matlab代码.rar
- 基于主成分分析(PCA)的EPFs(PCA-EPFs)方法在边缘保留特征在高光谱图像分类中的应用研究附Matlab代码.rar
- 具有电动驱动的四足机器人模型研究附Simulink&Matlab代码.rar
- 铰接式车辆的横向动力学仿真提供车辆模型研究附Matlab代码.rar
- 扩展卡尔曼滤波器用于扩展物体跟踪附Matlab代码.rar
- 利用机器学习算法对电力变压器热动力学进行Simulink建模和参数估计研究附Simulink仿真.rar
- 脉冲多普勒雷达信号处理技术研究附Matlab代码.rar
- 麻雀优化算法SSA及改进麻雀优化算法ASFSSA研究附Matlab代码.rar
- 模拟四旋翼飞行器的平移和旋转动力学附Matlab、Simulink仿真.rar
- 模拟使用机器人以电击方式杀死蚊子附Matlab代码.rar
- 蒙特卡洛风光场景并通过削减法聚类法得到几个典型场景附Matlab代码和Python代码.rar


