将返回的blob对象转为json数据

本文探讨如何在项目中处理文件上传,后端使用axios发送POST请求,处理blob对象并将其转换为JSON格式,以便根据不同code进行前端提示。核心代码展示了Blob转JSON的过程及相应的错误处理机制。

最近项目中有个需求是:先上传一个文件,然后后端对上传的文件进行一些处理,然后再把处理后的数据,用数据流的形式传到前端来。

着急的童鞋可以直接拉到底部看blob对象转为json的核心代码。

因为其他的增删改查接口都是统一封装的,对response的code进行统一处理:
在这里插入图片描述
就是用的 axios.interceptors.response.use() 对不同的code值进行不同的处理,因为不同的code代表不同的意义。

但是现在这个导入之后再导出文件的请求有个问题,它的返回值没有code值,所以这里单独写了一个:

export function importExport(data: any, token: any) {
    const $http = axios.create({
        baseURL: '/api',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            'Accept': '*/*',
            'Authorization': token,  // 别忘了加token
        },
        responseType: 'blob',  // 注意这个 type 是 blob
    })
    return $http.post<Interface>(`your url`, data);
}

但是这样写的话有个问题:如果导入文件成功然后再返回数据流是没问题的,但是如果导入文件由于某些原因导致导入失败了呢,那么返回值就会是code data 那些,这个时候要根据不同的code对用户进行提醒,可以返回的是blob对象啊,所以需要把blob对象转为json,并且对不同的情况进行处理。

const filesChange = async (files) => {
// 这里是监听一个上传组件的变化事件
    if (files && files.length > 0) {   // 排除对清空文件的处理
      const formdata = new FormData();
      formdata.append('file', files[0].file);
      const param = {
        file: formdata,
      };
      try {
      // token 是自己获取登录返回的token
        const res: any = await importExport(formdata, token);
        const reader = new FileReader();
        reader.readAsText(res.data, 'utf-8');
        reader.onload = function () {
          const t = JSON.parse(reader.result as string);
          if (t.code === 0) {
            data.uploadStateTxt = '成功';
            Message.success('上传成功!');
          } else if (t.code === 101) {
            Modal.error({
              title: '登录超时',
              content: '登录超时,请重新登录',
              okText: '重新登录',
              async onOk() {
                router.push({
                  name: 'login',
                });
              },
            });
          }
        };
      } catch {
        data.uploadStateTxt = '失败';
        Message.error('上传失败!');
      }
    }
  };

把blob对象转为json的核心代码:

const reader = new FileReader();
reader.readAsText(res.data, 'utf-8');
reader.onload = function () {
  const t = JSON.parse(reader.result as string);  // 这里就得到了json

希望本文对你有所帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值