文件blob、File、base64格式转换

本文详细讲述了Blob、File对象的属性,以及如何在JavaScript中实现Blob与File、Blob与Base64之间的转换,适合Web开发者了解相关技术细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、类型简介

(1)blob类型

        Blob是一种二进制数据类型,通常表示二进制文件、图片、音频或视频等媒体资源

属性名称读/写描述
size只读Blob 对象中所包含数据的大小(字节)
type只读一个字符串,表明该Blob对象所包含数据的MIME类型。如果类型未知,则该值为空字符串。例如 “image/png”

(2)File类型

        File 对象通常是用户在网页中的一个 元素上传文件返回的 FileList 对象,或者是拖放操作返回的 DataTransfer 对象,也可以在浏览器中的控制台中自己创建

属性名称读/写描述
name只读返回文件的名称,由于安全原因,返回的值并不包含文件路径
type只读返回 File 对象所表示文件的媒体类型(MIME),如PNG 图像是 “image/png”
lastModified只读number,返回所引用文件最后修改日期,自 1970年1月1日0:00 以来的毫秒数
lastModifiedDate只读Date,返回当前文件的最后修改日期,如果无法获取到文件的最后修改日期,则使用当前日期来替代
size只读File 对象中所包含数据的大小(字节)
webkitRelativePath只读返回 File 相关的 path 或 URL

(3)base64类型

        Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。编码规则:把3个字节变成4个字节;每76个字符加一个换行符;最后的结束符也要处理

2、类型转化

(1)blob 和 File 类型转换

  • blob 转 File
blobToFile(blob, fileName) {
	const file = new File([blob], fileName, { type: blob.type })
  return file
}

this.blobToFile(this.blob, '1.png')
  • File 转 blob
fileToBlob(data) {
  return new Promise((resolve, reject) => {
    const fileReader = new FileReader()
    fileReader.onload = (e) => {
      const blob = new Blob([e.target.result], { type: data.type })
      resolve(blob)
    }
    fileReader.readAsDataURL(data)
    fileReader.onerror = () => {
      reject(new Error('文件流异常'))
    }
  })
}

await this.fileToBlob(this.file)

(2)blob 和 base64 类型转换

  • blob 转 base64
blobToBase64(blob) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader()
    reader.readAsDataURL(blob)
    reader.onload = (e) => {
      resolve(e.target.result)
    }
  })
}

await this.blobToBase64(this.blob)
  • base64 转 blob
base64ToBlob(base64) {
  let arr = base64.split(',')
  let type = arr[0].match(/:(.*?);/)[1]
  let bstr = atob(arr[1])
  let n = bstr.length
  const u8arr = new Uint8Array(n)
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n)
  }
  return new Blob([u8arr], { type: type })
}

this.base64ToBlob('data:image/png;base64,/9j/4AAQSkZJRgABAQ')

(3)File 和 base64 类型转换

  • File 转 base64
fileToBase64 (data) {
  return new Promise((resolve, reject) => {
    const fileReader = new FileReader()
    fileReader.onload = (e) => {
      resolve(e.target.result)
    }
    fileReader.readAsDataURL(data)
    fileReader.onerror = () => {
      reject(new Error('文件流异常'))
    }
  })
}

await this.fileToBase64(this.file)
  • base64 转 File
base64ToFile(base64, filename) {
  const arr = base64.split(',')
  const type = arr[0].match(/:(.*?);/)[1]
  const bstr = atob(arr[1])
  let n = bstr.length
  const u8arr = new Uint8Array(n)
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n)
  }
  return new File([u8arr], filename, { type: type })
}

this.base64ToFile('data:image/png;base64,/9j/4AAQSkZJRgABAQ', '1.png')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值