【文件下载】接口传递文件成功和失败时,前端的处理方式

问题

使用bold类型从后端接口获取文件流,获取成功的时候通过a标签下载;失败的时候,后端返回的是json,这个时候就无法向用户展示后端返回的错误提示信息。

思路

根据返回类型是否为 application/json 区分是否返回成功,若失败,将blob格式转换为json格式。

代码

javascript 复制代码
    this.$http
        .post('/file/export', { exportType: 'xlsx' }, { responseType: 'blob' })
        .then(res => {
          if (res.data.type == 'application/json') {
            const reader = new FileReader()
            reader.readAsText(res.data, 'utf-8')
            reader.onload = () => {
              const result = JSON.parse(reader.result)
              this.$message.error(result.message)
            }
          } else if (res.data.type == 'application/octet-stream') {
            const downloadUrl = window.URL.createObjectURL(new Blob([res.data]))
            const link = document.createElement('a')
            link.href = downloadUrl
            document.body.appendChild(link)
            link.click()
          } else {
            this.$message.error('导出文件类型错误!')
          }
        })
        .catch(error => {
          this.$message.error('导出文件失败!')
        })
相关推荐
严肃小白兔11 分钟前
TanStack Router 更新构建工具链:Node.js 兼容性、路由分割与前端工程实践
前端·node.js·状态模式
IT_陈寒27 分钟前
Vue这个奇葩的响应式问题让我加班到凌晨
前端·人工智能·后端
风骏时光牛马38 分钟前
功能可用性自动化测试验证
前端
LucianaiB11 小时前
【元宝搜索开发者征文大赛】AI时代,学得慢就不用学?用元宝搜索打造一个教程保质期,确保每一个教程符合你的现状
前端·人工智能·ai编程
excel11 小时前
JavaScript 对象池:减少高频对象创建与 GC 压力
前端
陈随易12 小时前
纯 Go 写的 JS 引擎,跑分超过了 C 语言的 QuickJS
前端·后端·程序员
子兮曰14 小时前
Chrome 权限元素实战:144 与 151 的渐进增强写法
前端·javascript·chrome
IT_陈寒14 小时前
Redis连接池泄漏那次,我差点把生产环境搞崩了
前端·人工智能·后端
强尼银手14 小时前
我花一天做了个格斗游戏原型,判定全对,然后被「美术」劝退了
前端·javascript
石小石Orz14 小时前
AI 正在蚕食我们的编码能力
前端·后端·算法