当前位置: 首页 > wzjs >正文

专门建站的公司简洁手机购物网站会员中心模板

专门建站的公司,简洁手机购物网站会员中心模板,怎么下载网站动态图片,招标网站建设申请报告需求 在vue2中,后端接口返回一个文件流,前端实现excel文件流导出下载功能。 解决方案 利用axios请求后端接口,把后端返回的blob文件流转为一个临时在线url,然后利用a标签实现导出下载功能。 具体实现步骤 1、封装axios请求拦…

需求

在vue2中,后端接口返回一个文件流,前端实现excel文件流导出下载功能。

解决方案

利用axios请求后端接口,把后端返回的blob文件流转为一个临时在线url,然后利用a标签实现导出下载功能。

具体实现步骤

1、封装axios请求拦截器

关键代码对文件流返回结果的处理方式

import axios from 'axios'
import Vue from 'vue'
import store from '@/store/index'
import { Notification } from 'element-ui'
import logger from '@/plugins/logger'
// 基础路由
axios.defaults.baseURL = 'http://xxx:端口号' // 此处为后端接口服务器IP或域名地址// 设置请求超时为5分钟
axios.defaults.timeout = 300000// 不需要token验证的白名单
const noAuthWhiteList = ['/api/oa/auth',
]// 判断是否在白名单中
const isInWhiteList = (url) => {return noAuthWhiteList.some(whiteUrl => url.includes(whiteUrl))
}axios.interceptors.request.use((config) => {// 如果请求配置中明确指定了noAuth,或者url在白名单中,则不添加tokenif (!config.noAuth && !isInWhiteList(config.url)) {const token = store.state.main.tokentoken && (config.headers.Authorization = token)}const catalogId = store.state.main.catalogIdcatalogId && (config.headers.catalogId = catalogId)return config},(error) => {Notification.error({ title: '网络请求错误', message: error })logger.error(error)return Promise.reject(error)}
)axios.interceptors.response.use(function (response) {// 如果是文件流,直接返回if (response.config.responseType === 'blob') {return response;}if (response.data.code !== 200) {Notification.error({title: '请求失败',message: response.data.message || '数据填写错误,请查看错误日志详情',})return Promise.reject(response)}return Promise.resolve(response)},function (error) {if (error.code === 'ECONNABORTED' && error.message.includes('timeout')) {Notification.error({title: '请求超时',message: '请求已超时,请稍后重试。',})} else if (error.response && error.response.status === 401) {// 1.接口401的时候,需要调用refresh token接口if (localStorage.getItem('firstRefresh')) {// localStorage.clear()localStorage.setItem('TOKEN', '')location.reload()} else {localStorage.setItem('firstRefresh', true)store.dispatch(GET_REFRESH_TOKEN, {refreshToken: store.state.main.refreshToken,}).then((resp) => {localStorage.setItem('TOKEN')location.reload()}).catch((error) => {localStorage.setItem('TOKEN')location.reload()})}} else {// 处理文件流错误响应if (error.response && error.response.config.responseType === 'blob') {// 转换blob错误信息const reader = new FileReader();reader.onload = () => {try {const errorData = JSON.parse(reader.result);Notification.error({title: '导出失败',message: errorData.message || '文件导出失败',});} catch (e) {Notification.error({title: '导出失败',message: '文件导出失败',});}};reader.readAsText(error.response.data);} else {Notification.error({title: '请求失败',message: error.message,});}}logger.error(error)return Promise.reject(error)}
)function plugin(Vue, axios) {if (plugin.installed) {return}plugin.installed = trueObject.defineProperties(Vue.prototype, {$axios: {get() {return axios},},})
}Vue.use(plugin, axios)
export default Vue.prototype.$axios

2、引入axios依赖

import axios from '@/plugins/axios'

3、在api.js文件中请求接口,创建a标签实现下载导出

// 导出
export async function exportFile(params) {const res = await axios.post('/api/file/export', params, {responseType: 'blob',headers: {'Content-Type': 'application/json'}});// 从响应头中获取文件名const fileName = res.headers['content-disposition']? decodeURIComponent(res.headers['content-disposition'].split('filename=')[1]): `导出模板_${new Date().getTime()}.xlsx`;// 创建Blob对象const blob = new Blob([res.data], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'});// 创建下载链接const link = document.createElement('a');link.href = window.URL.createObjectURL(blob);link.download = fileName;link.click();window.URL.revokeObjectURL(link.href);
}          

写在最后

使用时把接口/api/file/export换为自己的接口地址即可,记住一定要加返回类型responseType: ‘blob’,否则可能造成文件无法正常打开。


文章转载自:

http://BHB2t6xQ.fqLjq.cn
http://TUMefe9S.fqLjq.cn
http://3KTHZ7sr.fqLjq.cn
http://V30dbGgg.fqLjq.cn
http://39NHt5kW.fqLjq.cn
http://Uxe1eXsx.fqLjq.cn
http://eLCm3Q0Z.fqLjq.cn
http://CZrvdoCg.fqLjq.cn
http://WE9jAEwD.fqLjq.cn
http://B4pb8Wvz.fqLjq.cn
http://94juBLE7.fqLjq.cn
http://b05BOC79.fqLjq.cn
http://lKBmMOkz.fqLjq.cn
http://fyB78bJ6.fqLjq.cn
http://Xvw5AXTM.fqLjq.cn
http://aS94STEK.fqLjq.cn
http://dd7xjxGH.fqLjq.cn
http://IebdjSCD.fqLjq.cn
http://A2DvpoWm.fqLjq.cn
http://WXeTQlsK.fqLjq.cn
http://ZK2Xj6ne.fqLjq.cn
http://thjUMGQZ.fqLjq.cn
http://alEcSfya.fqLjq.cn
http://blMUkGlT.fqLjq.cn
http://FQQSe9LO.fqLjq.cn
http://laU5NZaU.fqLjq.cn
http://DdVDt9Yc.fqLjq.cn
http://YDEMgAeq.fqLjq.cn
http://VrJbdBal.fqLjq.cn
http://WebODlWC.fqLjq.cn
http://www.dtcms.com/wzjs/700883.html

相关文章:

  • 做网站需要什么图片wordpress用户前台删除文章
  • 购物网站建设计划书 中国人免费的片
  • 网站开发团队人员构成在线下载免费软件的网站
  • 如何建设自己企业网站装修网站线怎样做
  • 如何制作课程网站模板下载地址濮阳网站建设专家团队
  • 孝感有做网站的公司吗中国建设的网站
  • 织梦网站查看原有文章网站建设的经费
  • 淘宝网站怎么做适配做冻品海鲜比较大的网站有哪些
  • 一个虚拟主机多个网站河南省财政企业信息管理系统
  • 广州企立科技做网站有域名了怎么建站
  • 英语培训机构网站建设策划书济南建设信用网站
  • 大邑做网站国家企业信用信息公示系统官网站
  • 济南建站服务商网站建设app开发合同范本
  • 买到域名网站怎么做建设什么企业网站
  • php网站开发基础做网站工资高吗
  • 关键词挖掘站长工具安全培训网站
  • 免费只做网站网络建设推广推荐
  • wordpress主题带会员中心西安seo王
  • 厦门外贸企业网站建设大连网站建设多少钱
  • 12个 网站模板 管理做词频分析的网站
  • 网站链接如何做二维码临沂做网站公司
  • 二级网站建设思路增加wordpress插件
  • 做网站就必须要开公司吗潍坊住房公积金管理中心
  • 网站建设公司昆明泰安房产网站建设
  • 安吉网站开发三明做网站公司
  • 产品网站建设公司哪家好医院网站建设
  • 阜宁网站建设找哪家好搜索公司信息的网站
  • 2017电商网站建设背景洛阳网站改版维护公司
  • 银川网站建设哪家不错丰台广州网站建设
  • 洛阳市涧西区建设局网站帮我写一篇网站