blob(js数据流之间的转换blob、file、DataURL、canvas、ArrayBuffer)

最后更新 :2023-03-11 22:01:38

将blob转成file

利用new File();

function blobToFile(blob, filename, type) {
	return new File([blob], filename, { type })
}

blobToFile('test info', 'test', 'text/plain' )

输出如下

更进一步了解可阅读MDN File - Web API 鎺ュ彛鍙傝€? | MDNMDN Web DocsMDN logoMozilla logo

Blob() - Web API 接口参考 | MDN讲解

将file转换成DataURL

利用URL.createObjectURL()

<input type="file" id="file">
<img id="img">
let img = document.getElementById('img')
let file = document.getElementById('file')
file.onchange = function () {
let imgFile = this.files[0]
img.src = URL.createObjectURL(imgFile)
	img.onload = function () {
		URL.revokeObjectURL(this.src)
	}
}

更进一步了解可阅读 MDN URL.createObjectURL() - Web API 鎺ュ彛鍙傝€? | MDNMDN Web DocsMDN logoMozilla logo 讲解

利用FileReader.readAsDataURL()

let img = document.getElementById('img')
let file = document.getElementById('file')
file.onchange = function (e) {
let imgFile = this.files[0]
let fileReader = new FileReader()
fileReader.readAsDataURL(imgFile)
  fileReader.onload = function () {
  	img.src = this.result
  }
}

更进一步了解可阅读FileReader - Web API 鎺ュ彛鍙傝€? | MDNMDN Web DocsMDN logoMozilla logo简介

将DataURL转成file

function dataURLToFile (dataUrl, fileName) {
const dataArr = dataUrl.split(',')
const mime = dataArr[0].match(/:(.*);/)[1]
const originStr = atob(dataArr[1])
	return new File([originStr], fileName, { type: mime })
}
dataURLToFile('data:text/plain;base64,YWFhYWFhYQ==', '测试文件')
// File {name: '测试文件', lastModified: 1640784525620, lastModifiedDate: Wed Dec 29 2021 21:28:45 GMT+0800 (中国标准时间), webkitRelativePath: '', size: 7, …}

复杂处理方式如下

function dataURLToFile (dataUrl, filename) {
const dataArr = dataUrl.split(',')
const mime = dataArr[0].match(/:(.*);/)[1]
const originStr = atob(dataArr[1])
let n = originStr.length
const u8Arr = new Uint8Array(n)
  while (n--) {
  	u8Arr[n] = originStr.charCodeAt(n)
  }
return new File([u8Arr], filename, { type: mime })
}
dataURLToFile('data:text/plain;base64,YWFhYWFhYQ==', '测试文件')
console.log(dataURLToFile('data:text/plain;base64,YWFhYWFhYQ==','测试文件'));
// File {name: '测试文件', lastModified: 1640784866937, lastModifiedDate: Wed Dec 29 2021 21:34:26 GMT+0800 (中国标准时间), webkitRelativePath: '', size: 7, …}


将canvas转成DataURL

利用canvas.toDataURL()

// html
<input type="file" accept="image/*" id="file">
// js
document.querySelector('#file').onchange = function () {
  canvasToDataURL(this.files[0]).then(res => console.log(res))
 }
function canvasToDataURL (file) {
return new Promise(resolve => {
    const img = document.createElement('img')
    img.src = URL.createObjectURL(file)
    img.onload = function () {
    const canvas = document.createElement('canvas')
    canvas.width = img.width
    canvas.height = img.height
    const ctx = canvas.getContext('2d')
    ctx.drawImage(img, 0, 0)
    resolve(canvas.toDataURL('image/png', 1))
    }
})
}


将DataURL转成canvas

function dataUrlToCanvas (dataUrl) {
return new Promise(resolve => {
    const img = new Image()
    img.src = dataUrl
    img.onload = function () {
    const canvas = document.createElement('canvas')
    canvas.width = this.width
    canvas.height = this.height
    const ctx = canvas.getContext('2d')
    ctx.drawImage(this, 0, 0)
    resolve(canvas)
    }
})
}
const dataUrl = 'data:image/png;base64,iVBORw0KGgoAAAANSUh...'
dataUrlToCanvas(dataUrl)
.then(res => document.body.appendChild(res))


将canvas转成blob

利用canvas.toBlob()


// html
<input type="file" accept="image/*" id="file">
// js
document.querySelector('#file').onchange = function () {
canvasToDataURL(this.files[0])
.then(res => console.log(res))
}
function canvasToDataURL (file) {
return new Promise(resolve => {
  const img = document.createElement('img')
  img.src = URL.createObjectURL(file)
  img.onload = function () {
  const canvas = document.createElement('canvas')
  canvas.width = img.width
  canvas.height = img.height
  const ctx = canvas.getContext('2d')
  ctx.drawImage(img, 0, 0)
  canvas.toBlob(function (e) {
  	resolve(e)
  }, 'image/png', 1)
}
})


将canvas转成file

将canvas转成Blob,然后将Blob转成file即可,可看最开始的文件类型转换流程图。

或将canvas转成dataURL,然后将dataURL转成file即可,可看最开始的文件类型转换流程图。

blob转arrayBuffer

利用
FileReader.readAsArrayBuffer()

function blobToArrayBuffer (blob, callback) {
const reader = new FileReader()
reader.readAsArrayBuffer(blob)
reader.onload = function () {
	callback(this.result)
}
}
let blob = new Blob([1, 2, 3, 4, 5])
blobToArrayBuffer(blob, (arrayBuffer) => { console.log(arrayBuffer) })
// ArrayBuffer(5)


arrayBuffer转blob

利用new Blob()

function arrayBufferToBlob (arrayBuffer, type) {
	return new Blob([arrayBuffer], { type })
}
blobToArrayBuffer(new Blob([1, 2, 3, 4, 5]), (arrayBuffer) => {
console.log(arrayBufferToBlob(arrayBuffer, 'text/plain'))
// Blob {size: 5, type: 'text/plain'}
})

————————————————

版权声明:本文为CSDN博主「定栓」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:
https://blog.csdn.net/weixin_44116302/article/details/122064841

blob是什么数据类型 blob是什么意思啊
blobfish blob类型
blob分析 blob opera
blob:htttp blob翻译
blob文件流 blob如何转换为图片
 

- END -

高考出国留学中介(留学中介天花板!高考落榜?这家中介帮你突破!)

留学中介天花板高考落榜这家中介帮你打破微软雅黑微软雅黑列位高三的微软雅黑以前坐在科...

张丽玲纪录片我们的留学生活(追梦女人张丽玲:16岁闯北京,22岁留学日本,31岁任董事长)

追梦女人张丽玲岁闯北京岁留学日本岁任董事长年生于浙江丽水的张丽玲有着江南女子的娇小...