图片或文件Blob、File、Base64之间的相互转换

简介: 在做前端项目的时候,遇到图片的上传或者下载时,不可避免的会遇到Blob、File、Base64三种类型的转换。那么今天就总结下,三者之间的相互转换。首先我们看看base64 ,File 对象,Blob 对象长什么样的,怎么来的。

前言

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

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

  1. base64 : 可以直接当作链接地址使用
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABGU....
  1. 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
}
  1. Blob 对象
Blob{
    size: 25748
    type: "image/png"
    [[Prototype]]: Blob
}
  1. 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)
        }
    })
 
}   
相关文章
|
人工智能 Java 对象存储
Java获取阿里云图片临时URL与图片文件转换Base64编码方法
在使用阿里云人工智能产品服务时,有部分服务需要上传的参数中包含文件URL,当我们没有开通OSS服务时,可以使用临时URL服务、或部分服务支持Base64编码格式,此文章为生成临时URL-JavaSDK方案与图片文件转换Base64编码方案。
2011 0
|
2月前
|
前端开发
前端base64转Blob,Blob转文件下载
前端将base64字符串转换为Blob对象,再将Blob对象转换为文件并实现下载。包括处理数据URL和纯base64字符串的情况,并提供了一个辅助函数用于转换。
58 2
|
6月前
将图片(路径)转换为Base64 和 将base64转换为file类型
将图片(路径)转换为Base64 和 将base64转换为file类型
|
6月前
|
存储 移动开发 自然语言处理
谈谈JS二进制:File、Blob、FileReader、ArrayBuffer、Base64(下)
谈谈JS二进制:File、Blob、FileReader、ArrayBuffer、Base64(下)
120 0
|
6月前
|
JSON 前端开发 JavaScript
JS前端读取本地上传的File文件对象内容(包括Base64、text、JSON、Blob、ArrayBuffer等类型文件)
JS前端读取本地上传的File文件对象内容(包括Base64、text、JSON、Blob、ArrayBuffer等类型文件)
|
11月前
blob和base64互转
blob和base64互转
133 0
图片转base64 并根据格式加前缀
图片转base64 并根据格式加前缀
392 0
|
前端开发 JavaScript 数据安全/隐私保护
前端通过Blob或File文件获取二进制数据
前端通过Blob或File文件获取二进制数据
前端通过Blob或File文件获取二进制数据
|
Web App开发 前端开发
|
前端开发
HTML之图像数据base64、object file之间的相互转换
HTML之图像数据base64、object file之间的相互转换