添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议 》和 《 阿里云开发者社区知识产权保护指引 》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单 进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

在做前端项目的时候,遇到图片的上传或者下载时,不可避免的会遇到Blob、File、Base64三种类型的转换。那么今天就总结下,三者之间的相互转换。

首先我们看看base64 ,File 对象,Blob 对象长什么样的,怎么来的。

  • base64 : 可以直接当作链接地址使用
  • data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABGU....
  • File 对象:
  • File{
        lastModified: 1649490762164
        lastModifiedDate: Sat Apr 09 2022 15:52:42 GMT+0800 (GMT+08:00) {}
        name: "1649490762160-251.png"
        size: 25748
        type: "image/png"
        webkitRelativePath: ""
        [[Prototype]]: File
     
  • Blob 对象
  • Blob{
        size: 25748
        type: "image/png"
        [[Prototype]]: Blob
     
  • blob链接
  • blob:url/22ec44b8-5864-4960-8ea8-a71a7e40bb63

    base64 转 Blob 对象

    //base64 转 Blob对象
    /* base64: data:image/png;base64,iVB....
    /* Blob:{...}
    function base64ToBlob(data) {
        var arr = data.split(','),
            mime = arr[0].match(/:(.*?);/)[1],
            bstr = atob(arr[1]),
            n = bstr.length,
            u8arr = new Uint8Array(n);
        while (n--) {
            u8arr[n] = bstr.charCodeAt(n);
        return new Blob([u8arr], { type: mime });
    

    base64 转 File 对象

    /** base64 转 File 对象
      /* @param data base64
      /* @param filename 自定义文件名
      /* @return File 对象
      function base64ToFile(data, filename) {
          var arr = data.split(','), mime = arr[0].match(/:(.*?);/)[1],
              bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
          let suffixArr = mime.split("/")
          if (suffixArr.length && !filename) {
              let suffix = suffixArr[suffixArr.length - 1]
              filename = new Date().getTime() + "-" + Math.floor((Math.random() * 10000)) + "." + suffix
          while (n--) {
              u8arr[n] = bstr.charCodeAt(n);
          return new File([u8arr], filename, { type: mime });
    

    File 对象,Blob 对象 转base64

    //blob ,File 对象 转 base64
    function blobFileTobase64(blobFile) {
        let reader = new FileReader()
        reader.readAsDataURL(blobFile);
        return new Promise((resolve, reject) => {
            reader.onload = function () {
                resolve(this.result)
            reader.onerror = (err) => {
                reject(err);
    

    blob链接转 base64 :

    利用canvas.toDataURL的API转化成base64

    function urlToBase64(url, type = "image/png") {
        return new Promise((resolve, reject) => {
            let img = new Image()
            img.src = url
            img.onload = function () {
                let canvas = document.createElement("canvas")
                canvas.width = this.naturalWidth
                canvas.height = this.naturalHeight
                let ctx = canvas.getContext("2d")
                ctx.drawImage(img, 0, 0)
                let result = canvas.toDataURL(type || 'image/png')
                resolve(result)
            img.onerror = function (err) {
                reject(err)