Blob,DataURL和File之间的转换

*爱你&永不变心* 提交于 2020-01-30 03:49:41

Blob对象是一个不可变、原始数据的类文件对象

File对象继承于Blob,并具有支持用户系统上的文件的拓展功能

DataURL是Base64编码,可通过window下的btoa,atob方法来分别做编码和解码

  • DataURL转成File对象
/**
 * @param {String} dataurl 传入的文件base64编码
 * @param {String} filename 文件名
 * @param {String} type 文件类型
 */
export const dataURLtoFile = (dataurl, filename = "file", type) => {
  let arr = dataurl.split(",");
  let bstr = atob(arr[1]);
  !type && (type = arr[0].replace("data:", "").replace(";base64", ""));
  let n = bstr.length,
    u8arr = new Uint8Array(n);
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n);
  }
  return new File([u8arr], filename, {
    type
  });
};
  • DataURL转化为Blob对象 
/**
 * @param {String} dataurl
 */
export const dataURLToBlob = dataurl => {
  let arr = dataurl.split(",");
  let bstr = atob(arr[1]);
  let n = bstr.length,
    u8arr = new Uint8Array(n);
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n);
  }
  return new Blob([u8arr]);
};
  • 将Blob转换成File文件 
/**
 * @param {Blob} blob
 * @param {String} filename
 * @param {String} type
 */
export const blobToFile = (blob, filename = "file", type) => {
  !type && console.error("请传入转化文件的类型type!!!");
  return new File([blob], filename, {
    type
  });
};
  • File对象或者Blob对象转换为DataUrl 
/**
 * @param {File | Blob} fileOrBlob
 */
export const fileOrBlobToDataURL = fileOrBlob => {
  var fileReader = new FileReader();
  fileReader.readAsDataURL(fileOrBlob);
  return new Promise(resolve => {
    fileReader.onload = function (e) {
      resolve(e.target.result);
    };
    fileReader.onerror = err => {
      reject(err);
    };
  });
};
  • File转化成Blob对象 
/**
 * @param {File} file
 */
export const fileToBlob = file => {
  let fileReader = new FileReader();
  fileReader.readAsArrayBuffer(file);
  return new Promise((resolve, reject) => {
    fileReader.onload = e => {
      resolve(
        new Blob([e.target.result], {
          type: file.type
        })
      );
    };
    fileReader.onerror = err => {
      reject(err);
    };
  });
};

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!