axios下载接口后端返回了json但前端得到的是blob

2024-04-29 10:36

本文主要是介绍axios下载接口后端返回了json但前端得到的是blob,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景:

        通过axios下载文件,正常情况下后端返回内容blob,前端接收并导出文件。但有时候,后端业务逻辑需要提示错误,于是返回json,但前端预期接收的是blob,所以导出去的文件内容是json字符串。

原因:

        axios请求头配置了响应格式 responseType: 'blob'

const service = axios.create({baseURL: '/'
})
// 导出用户列表
export function exportUserList(data){return request({url: '/admin/accelerate/duration/download',method: 'post',responseType: 'blob', // 指定响应内容为blobdata})
}

解决方法:

        在axios响应拦截器中,判断请求的响应类型。若预期返回blob但实际返回json,则将blob转成json字符串,然后进行错误提示。

// blob转字符串
export const blobTojsonstr = (blob) => {return new Promise((resolve, reject) => {const reader = new FileReader();reader.onload = (e) => resolve(e.target.result);reader.onerror = (e) => reject(e.target.error);reader.readAsText(blob);});
}
import { Notification } from 'element-ui'// HTTP response 拦截
service.interceptors.response.use(async (res) => {const status = res.statusconst responseType = res.config.responseType // 预期响应数据类型const contentType = res.headers['content-type'] // 真实响应数据类型let resData = null,isBlob = ['arraybuffer', 'blob'].includes(responseType)if (!isBlob) {// 预期是非文件,即jsonresData = res.data} else {// 预期是文件if (contentType.indexOf('application/json') > -1) {// 下载接口异常:Blob转Json后解密isBlob = falsetry {const content = await blobTojsonstr(res.data)resData = JSON.parse(JSON.parse(content).data)} catch (error) {resData = res.data}} else {resData = res.data}}// 不正确的状态码进行统一处理if (!isBlob && (status !== 200 || resData.code !== 0)) {const errMsg = resData.msgNotification.error({title: errMsg})return Promise.reject(new Error(errMsg))}return resData},(error) => {return Promise.reject(new Error(error))}
)

效果:

        正常情况下,后端返回blob,axios接收blob并导出文件。

        异常情况下,后端返回json,axios接收blob后转成json,根据错误码code提示错误。

这篇关于axios下载接口后端返回了json但前端得到的是blob的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/945855

相关文章

https://www.cloudmidi.net/ableton-live-11-suite-v11-0-macos.html

macOS | 2021年2月23日| 2.5 GB 使用Live的新设备创建更大胆的声音。 通过大量工作流程改进来保持发展。 借助Push,可以使笔记本计算机与计算机的距离更远。 使用精选库来建立声音。 并获得无缝内置的Max for Live的无限潜力。 使用新设备进行创建 满足Wavetable,Echo,Drum Bus和Pedal的需求:借助Live的乐器和效果,可以带来丰富多彩

前端手写练习题及概念加深

通过举例和实际例子来加深前端的概念形式  1. 手写reduce 用法: // 手写 reduceconst a = [1, 3, 6, 8]const sum = a.reduce((accu, curr) => accu + curr, 0)console.log('sum', sum ) 在注释中解释 reduce 的手写方法 // 1. 明确参数累加函数,接受两个参数,回调函

JP-Word 简谱编辑(JPW简谱)打谱软件免费版下载 WiN

Windows | 20M JP-Word简谱编辑软件(简称JPW简谱软件)是一款专业的简谱编辑排版软件,操作方式如同在Word中打字,所见即所得,独创的“切换音符时值组合”功能,输入速度快捷高效!无论歌谱、戏曲谱、合唱谱乃至器乐谱,均可轻松应对。生成的乐谱规范精美,高质量的输出可用于书籍出版。乐谱可播放,也可导出为MIDI文件,甚至还可以生成mp3/mp4,制作动态乐谱!。 JPW简谱软

Ziipoo(易谱)简谱编辑制作打谱软件免费版下载 WiN+MAC+安卓+Linux

更新说明: 最新版更新说明[2491版,2021-05-30日更新] 2474版开始支持原生的ARM芯片mac(M1芯片的mac) 2440版开始linux支持内置浏览器功能和mac/win平台同步。 2429版开始支持多文档及重做功能。 2362版开始提供原生linux版。 2346版开始支持内部浏览器。 2328版开始支持soundfont音色。 2314版开始支持快音输入法插件,可以提

鸿蒙开发接口Ability框架:【 (Context模块)】

Context模块 Context模块提供了ability或application的上下文的能力,包括允许访问特定于应用程序的资源、请求和验证权限等。 说明: 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 本模块接口仅可在FA模型下使用。 使用说明 Context对象是在featureAbility中创建实例,并通过fe

怎么批量下载视频?DY视频爬虫在线提取采集工具

短视频批量下载工具,具有多种模块和功能,方便用户快速批量下载短视频。该软件的详细介绍: 功能模块介绍: 一. 搜索词批量搜索下载 视频关键词添加:支持添加多个视频关键词进行全平台视频搜索。历史去重:可选择是否去除重复的视频。抓取分享链接:选择是否抓取分享链接。时间筛选:支持选择提取视频的发布时间段。定时重复抓取:可定时自动抓取所需视频。下载路径选择:用户可以选择下载地址。实时状态显示:显示搜

Html5前端图片压缩

function compress(img, type) { var width = img.width; var height = img.height; // 如果图片大于四百万像素,计算压缩比并将大小压至400万以下 // var ratio; // if ((ratio = width * height / 4000000) > 1) { // ratio =

Json转化为对象

C#中json转化为对象的简单方案 需要添加命名空间  using System.Web.Script.Serialization;  public class LoginResult     {         public int Code { get; set; }         public string Msg { get; set; }         public st

微信 HTML5 实现列表页与详情页无刷新返回 seesionStorage

最近在最微信端开发,遇到了一个比较有意思的问题。  1:商品分页列表页 2:商品详情页 需求:  实现当在第N页的列表页,点击ID=Num的商品详情页,跳转到详情页后,再点击返回按钮,依旧返回到列表第N页,并显式的改变ID=Num商品的查看状态 注:详情页与列表页是两个视图页,并且要考虑弱网请求服务端接口比较慢的情况 解决思路:使用sessionStorage 在列表页中将请

20.接口自动化-Git

1、Git和SVN–版本控制系统 远程服务出问题后,可以先提交commit到本地仓库,之后再提交push远程仓库 git有clone Git环境组成部分 常用Git代码仓库服务-远程仓库 GitHub-服务器在国外,慢 GitLab-开源,可以在自己服务器搭建(代码私有性),吃内存 Gitee码云-国内 本机Git操作环境 git环境 Git工作原理(流程) fetch