file,filereader,blob,base64,arraybuffer数据类型的一些总结

// 解析反解析url
// decodeURI函数能解码由encodeURI 创建或其它流程得到的统一资源标识符(URI)
// encodeURI()函数通过将特定字符的每个实例替换为转义序列来对统一资源标识符(URI)进行编码URI
// decodeURIComponent方法用于解码由 encodeURIComponent 方法或者其它类似方法编码的部分统一资源标识符(URI)
// encodeURIComponent函数通过将表示字符的 UTF-8 编码的转义序列替换某些字符的每个实例来编码 URI
// encodeURI不会编译有些httpURL中的预留符号,而encodeURIComponent会编译

// FileReader
// 用来读取File和Blob数据
// readAsArrayBuffer读取arrayBuffer
// readAsDataURL读取base64

// blob(其实可以和file对比)
// blob表示类文件对象(不可变,原始数据)可以是文本或者二进制类型,文件就是基于blob数据的
// new Blob(['<a id="a"><b id="b">hey!</b></a>'], {type : 'text/html', endings: 'transparent'})创建blob对象可指定类型
// 是一个由ArrayBuffer, ArrayBufferView, Blob, DOMString 等对象构成的 Array
// silce截取blob对象的一段
// stream使用流的形式读取blob
// text获取blob的utf-8格式的内容
// arrayBuffer获取二进制

// base64
// 二进制到文本的编码规则,ASCII 字符串的格式表示
// atob函数能够解码通过 base-64 编码的字符串数据
// btoa函数能够从二进制数据“字符串”创建一个 base-64 编码的 ASCII 字符串

// ArrayBuffer(操作二进制)
// 对象用来表示通用的、固定长度的原始二进制数据缓冲区。
// 来源本地文件,base64字符串,接口请求的数据
// 只能通过dataView和类数组对象(Int8Array,Uint8Array之类的)

// base64转arraybuffer
function base64ToArrayBuffer(base64: string) {
  var binary_string = window.atob(base64);
  var len = binary_string.length;
  var bytes = new Uint8Array(len);
  for (var i = 0; i < len; i++) {
    bytes[i] = binary_string.charCodeAt(i); // 表示给定索引处的 UTF-16 编码单元表示的 Unicode 码点
  }
  return bytes.buffer;
}

// base64转文件
function baseToFile(base64: string, name: string) {
  let str = base64.split(",");
  let mime = (str[0] || "").match(/:(.*?);/);
  let bstr = atob(str[1]);
  let n = bstr.length;
  let u8arr = new Uint8Array(n);
  for (let i = 0; i < n; i++) {
    u8arr[i] = bstr.charCodeAt(i);
  }
  return (
    mime &&
    mime[0] &&
    new File([u8arr], name, {
      type: mime[0],
    })
  );
}

// base64转blob -->> base64转arrayBuffer -->> arrayBuffer转blob

// ArrayBuffer转base64
function arrayBufferToBase64(buffer: Buffer) {
  let binaryStr = "";
  const bytes = new Uint8Array(buffer);
  for (let i = 0, len = bytes.byteLength; i < len; i++) {
    binaryStr += String.fromCharCode(bytes[i]); // 将 Unicode 编码转为一个字符
  }
  return window.btoa(binaryStr);
}

// ArrayBuffer转blob
function arrayBufferToBlob(arrayBuffer: Buffer) {
    new Blob([arrayBuffer], {type: 'text/html' as string, endings: 'transparent'})
}

// blob转base64
function blobToBase64(blob: Blob) {
  var reader = new FileReader();
  reader.readAsDataURL(blob);
  reader.onloadend = function () {
    var base64data = reader.result;
  };
}

// blob转文件
function blobToFile(blobData: Blob) {
  let reader = new FileReader(); // 创建读取文件对象
  reader.readAsText(blobData, "utf-8");
  reader.onload = (e) => console.log(e);
}

// Blob,File下载转成内存链接
function getBlob(Data: Blob | File) {
  let href = URL.createObjectURL(Data);
  download(href, "name");
  URL.revokeObjectURL(href);
}

const download = (url: string, name: string) => {
  let a = document.createElement("a");
  a.href = url;
  a.download = name;
  document.body.appendChild(a);
  a.click();
  document.body.removeChild(a);
};

套用董哥的一句话,blob是base64和arraybuffer的中转站。
开发图文编排的项目中会碰到很多数据结果之间的转化,项目间隙做一下总结和记录

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值