Skip to content

blob

Blob (Binary Large Object) 对象表示一个不可变、原始数据的类文件对象

property

  • Blob.prototype.size 只读,Blob 对象中所包含数据的大小(字节)
  • Blob.prototype.type 只读,一个字符串,表明该 Blob 对象所包含数据的 MIME 类型

method

  • Blob.prototype.arrayBuffer() 返回一个 promise,其会兑现一个包含 Blob 所有内容的二进制格式的 ArrayBuffer
  • Blob.prototype.slice() 返回一个新的 Blob 对象,包含了源 Blob 对象中指定范围内的数据
  • Blob.prototype.stream() 返回一个能读取 Blob 内容的 ReadableStream
  • Blob.prototype.text() 返回一个 promise,其会兑现一个包含 Blob 所有内容的 UTF-8 格式的字符串

创建一个 blob

js
const obj = { hello: 'world' }
const blob = new Blob([JSON.stringify(obj, null, 2)], { type: 'application/json' })

// 转化为 URL
const blobURL = URL.createObjectURL(blob)
const obj = { hello: 'world' }
const blob = new Blob([JSON.stringify(obj, null, 2)], { type: 'application/json' })

// 转化为 URL
const blobURL = URL.createObjectURL(blob)

下载blob

axios 请求后端返回文件二进制

js
async function downloadFile(url) {
  const res = await axios.get(url, { responseType: 'blob' })
  const { data, headers } = res
  const fileName = headers['content-disposition'].replace(/\w+;filename=(.*)/, '$1')
  // 此处当返回json文件时需要先对data进行JSON.stringify处理,其他类型文件不用做处理
  // const blob = new Blob([JSON.stringify(data)], ...)
  const blob = new Blob([data], { type: headers['content-type'] })
  const dom = document.createElement('a')
  let url = window.URL.createObjectURL(blob)
  dom.href = url
  dom.download = encodeURIComponent(fileName)
  dom.style.display = 'none'
  document.body.appendChild(dom)
  dom.click()
  dom.parentNode.removeChild(dom)
  window.URL.revokeObjectURL(url)
}
async function downloadFile(url) {
  const res = await axios.get(url, { responseType: 'blob' })
  const { data, headers } = res
  const fileName = headers['content-disposition'].replace(/\w+;filename=(.*)/, '$1')
  // 此处当返回json文件时需要先对data进行JSON.stringify处理,其他类型文件不用做处理
  // const blob = new Blob([JSON.stringify(data)], ...)
  const blob = new Blob([data], { type: headers['content-type'] })
  const dom = document.createElement('a')
  let url = window.URL.createObjectURL(blob)
  dom.href = url
  dom.download = encodeURIComponent(fileName)
  dom.style.display = 'none'
  document.body.appendChild(dom)
  dom.click()
  dom.parentNode.removeChild(dom)
  window.URL.revokeObjectURL(url)
}

File

文件(File)接口提供有关文件的信息,并允许网页中的 JavaScript 访问其内容,File对象是Blob的一种特殊类型,表示用户选择的文件。它具有一些与文件相关的属性和方法,如文件名、文件大小、文件类型

通常 File 对象来自用户 <input type='file'> 选择文件后返回的 FileList 对象

property

  • name:文件名
  • size:文件大小(以字节为单位)
  • type:文件的MIME类型
  • lastModified:文件最后修改时间的时间戳

method

  • slice() 截取原始File对象中的一部分数据,返回一个新的File或Blob对象
  • stream() 返回一个可读取文件数据的可读流(ReadableStream)对象

atob btoa

atob

atob() 是 JavaScript 中的一个内置函数,用于将 Base64 编码的字符串解码为原始字符串

js
const base64String = 'SGVsbG8sIFdvcmxkIQ=='
const decodedString = atob(base64String)
// "Hello, World!"
const base64String = 'SGVsbG8sIFdvcmxkIQ=='
const decodedString = atob(base64String)
// "Hello, World!"

btoa

btoa() 是 JavaScript 中的一个内置函数,用于将原始字符串转换为 Base64 编码的字符串

js
const originalString = 'Hello, World!'
const encodedString = btoa(originalString)
// "SGVsbG8sIFdvcmxkIQ=="
const originalString = 'Hello, World!'
const encodedString = btoa(originalString)
// "SGVsbG8sIFdvcmxkIQ=="