前端接受后端文件流并下载到本地的方法
2020-06-05 10:54
288 查看
前端接受后端文件流并下载到本地的方法
背景
项目中时常需要从后端下载文件到本地,如下载excel模板,或者合同文件之类的,前端应该如何处理后端返回的文件流并下载到本地呢?
法一:针对get方法的文件流下载
此方法是最为简单的,直接将页面路径重新定向到后端请求文件流的接口地址即可
window.location.href = '后端的文件流下载接口地址';
法二:针对get和post通用的文件流下载
配置axios
import axios from 'axios'; const service = axios.create({ baseURL: process.env.VUE_APP_BASE_API, timeout: 30000, headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', }, }); // 请求拦截 service.interceptors.request.use( (config) => { config.headers['X-User-Token'] = localStorage.getItem('token'); return config; }, (error: any) => { Promise.reject(error); }, ); // 响应拦截 service.interceptors.response.use( (response: any) => { const res = response.data; if (response.config && response.config.responseType === 'blob') { // 判断是不是下载请求 const excelUrl = window.URL.createObjectURL(new Blob([res])); const link = window.document.createElement('a'); const fileName = JSON.parse(response.config.data).fileName; // 文件名 const suffix = JSON.parse(response.config.data).suffix; // 文件后缀 const isDownload = JSON.parse(response.config.data).isDownload; // 是否是下载(如果不是下载则为导出) link.href = excelUrl; link.download = `${fileName}.${suffix ? suffix : 'xlsx'}`; document.body.appendChild(link); // 兼容FireFox link.click(); window.URL.revokeObjectURL(excelUrl); link.remove(); // 兼容FireFox console.log(isDownload ? '下载成功!' : '导出成功!') } return Promise.resolve(res); // 下载文件可能没code情况 }, (error: any) => { return Promise.reject(error); }, ); export default service;
请求方法
// 下载合同 import $axios from '@/utils/axiosUtil'; export const downloadProtocol = (data: any) => { return $axios({ url: `后端的下载地址`, method: 'get', responseType: 'blob', data, }); };
组件调用
// 下载合同 private async uploadProtocol() { const params = { applyId: this.applyId, fileName: '合同协议', suffix: 'zip', isDownload: true, }; const res: any = await downloadProtocol(params); }
相关文章推荐
- 前端处理后端文件流并下载的方法
- 前端下载文件流并且获取heads中的filename文件名且解决中文乱码的方法
- ASP.NET DEV 前端利用后端方法显示PDF文件链接地址,点击下载
- 前端将后台传的文件流下载为文件到本地
- MVC 中前端传递Json数据,后端以对象形式接受参数的处理方法
- CaptainGan------使用递归方法实现,向FTP服务器上传整个目录结构、从FTP服务器下载整个目录到本地的功能
- js实现canvas保存图片为png格式并下载到本地的方法
- 【备忘】python从零基础到前端到后端的开发视频教程下载
- 将下载到本地的JAR包手动添加到Maven仓库的方法
- 微信扫码支付官方下载的demo本地运行时遇到的坑以及对应解决方法
- maven 把 下载的jar包添加到本地仓库 的方法
- 本地上传视频获取封面,自动下载成图片( js 前端)
- 使用urllib库的urlretrieve()方法下载网络文件到本地
- HTML5打开本地app应用的方法,如果你的手机上安装App,就会自动打app,否则在页面上会提示你进行下载app
- php获取CSS文件中图片地址并下载到本地的方法
- 后端数据传输到前端的两种方法(JQuery:AJAX 或 SpringMVC:ModelAndView)
- springMVC后台如何接受前端上传的文件,与及下载文件
- secureCRT,将linux系统中的文件下载到本地的方法
- 如何将本地文件上传/下载到Linux云服务器,分享三种方法
- webstorm11.0下载地址和webstorm11.0破解程序patcher.exe下载使用方法说明 前端IDE工具的利器