vue 图片file、base64与blob之间相互转换

file转base64

fileToBase64 (file) {
  return new Promise((resolve, reject) => {
    // 创建一个新的 FileReader 对象
    const reader = new FileReader();
    // 读取 File 对象
    reader.readAsDataURL(file);
    // 加载完成后
    reader.onload = function () {
      // 将读取的数据转换为 base64 编码的字符串
      const base64String = reader.result.split(",")[1];
      // 解析为 Promise 对象,并返回 base64 编码的字符串
      resolve('data:image/jpeg;base64,' + base64String);
    };
    // 加载失败时
    reader.onerror = function () {
      reject(new Error("Failed to load file"));
    };
  })
}

base64转file

base64ToFile(base64Data) {
  // 分割base64
  const arr = base64Data.split(','); 
  // 获取类型
  const mime = arr[0].match(/:(.*?);/)[1];
  // 解析base字符串
  const bstr = window.atob(arr[1]); 
  const n = bstr.length; 
  // base64文件数据读取
  const u8arr = new Uint8Array(n);
  for (let i = 0; i < n; i += 1) {
    u8arr[i] = bstr.charCodeAt(i);
  }
  return new File([u8arr], '', { type: mime });
}

base64转blob

base64ToBlob(base64Data) {
  // 分割base64
  const temp = base64Data.split(','); 
  // 获取类型
  const mime = temp[0].match(/:(.*?);/)[1];
  // 解码使用 base-64 编码的字符串
  const raw = window.atob(temp[1]);
  const rawLength = raw.length;
  // base64文件数据读取
  const uInt8Array = new Uint8Array(rawLength);
  for (let i = 0; i < rawLength; i += 1) {
    uInt8Array[i] = raw.charCodeAt(i);
  }
  return new Blob([uInt8Array], {type: mime})
}

blob转base64

blobToBase64 (blob) {
  return new Promise((resolve,reject) => {
    const reader = new FileReader();
    reader.readAsDataURL(blob);
    reader.onload = () => {
      const base64 = reader.result;
      resolve(base64);
    }
    reader.onerror = function () {
      reject(new Error("Failed to load file"));
    };
  })
}

file转blob

const blob = URL.createObjectURL(file)

blob转file

const file = new File([blob], fileName, { type: fileType, lastModified: Date.now() });

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值