js处理服务器响应Blob对象格式文件处理

js验证http请求返回数据data是否为blob格式:

// 验证是否为blob格式
export async function blobValidate(data) {
  try {
    const text = await data.text();
    JSON.parse(text);
    return false;
  } catch (error) {
    return true;
  }
}

使用场景:

import { saveAs } from "file-saver";
export function download(url, params, filename, config = {}) {
  downloadLoadingInstance = Loading.service({
    text: "正在下载数据,请稍候",
    spinner: "el-icon-loading",
    background: "rgba(0, 0, 0, 0.7)"
  });
  if (!config.timeout) {
    config.timeout = 60000;
  }
  return service[params.method || "post"](
    url,
    params,
    config.headers
      ? { responseType: "blob", ...config }
      : {
          transformRequest: [
            (params) => {
              return tansParams(params);
            }
          ],
          headers: { "Content-Type": "application/x-www-form-urlencoded" },
          responseType: "blob",
          ...config
        }
  )
    .then(async ({ data, headers }) => {
     // 使用正则表达式提取文件名
      const regex = /filename=(.*)$/i; // i 标志表示不区分大小写
      const matches = headers["content-disposition"].match(regex);
      let fileN = "";
      if (matches && matches[1]) {
        fileN = decodeURIComponent(matches[1]); // 对编码进行解码
      } else {
        console.error("无法从 Content-Disposition 中获取文件名");
      }
      // 解析不了就是文件内容
      const isBlob = await blobValidate(data.data);
      if (isBlob) {
        const blob = new Blob([data.data]);
        saveAs(blob, filename || fileN);
      } else {
        const resText = await data.data.text();
        const rspObj = JSON.parse(resText);
        const errMsg =
          errorCode[rspObj.code] || rspObj.msg || errorCode["default"];
        Message.error(errMsg);
      }
    })
    .catch((error) => {
      console.log(error, "error");
      Message.error("下载文件出现错误!");
    })
  • 其他补充:

在JavaScript中,你可以通过检查传入参数的类型来判断它是否为Blob格式。下面是一个简单的示例函数,用于验证传入的参数是否为Blob类型:

function isBlob(value) {
  return value instanceof Blob;
}

// 使用示例
const blob = new Blob(["Hello, world!"], {type: "text/plain;charset=utf-8"});
console.log(isBlob(blob));  // 输出: true

const notBlob = "这只是一个字符串";
console.log(isBlob(notBlob));  // 输出: false

这个函数isBlob接收一个参数value,并通过instanceof操作符检查该参数是否为Blob构造函数的实例。如果是,则返回true,表示参数是Blob类型;否则返回false。这是一种常用且直接的方式来判断对象的类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值