dataURL
一种特殊的URL格式,区分于传统的URL, 传统的URL可以看得出来域名地址等,而DataURL看不出来
主要结构是data:[<mediatype>][;base64],<data>
| 组成 | 含义 |
|---|---|
data: |
前缀 |
[<mediatype>] |
MIME type 代表数据的类型 |
[;base64] |
可选的base64标识 |
<data> |
数据本身 |
blob
(binary large object),二进制大对象,是一个可以存储二进制文件的容器; 对象表示一个不可变、原始数据的类文件对象
将 blob 或 file 转成 DataURL(base64) 形式
readBlob(somfile).then((data) => {console.log(data)})function readBlob(file) {return new Promise((resolve, reject)=> {let reader = new FileReader()reader.onload = (e) => {resovle(e.target.result)}reader.readAsDataURL(blob)})}
DataURL、Blob、 File、 Image之间的关系与转换
// dataUrl 转成blobfunction dataUrl2Blob(dataUrl) {let arr = dataUrl.split(',') // 根据data:mimeType[;base64],<data>的形式拆分数据let mimeType = arr[0].match(/:(.*?);/)[1] // 获取mimeTypelet contentStr = atob(arr[1]) // 将base64转码成string; btoa表示将字符串转成base64let len = contentStr.lengthlet u8arr = new Uint8Array(len)while(len--) {u8arr[len] = contentStr.charCodeAt(len)}// 拿到数据后生成return new blob([u8arr], {type: mimeType})}// dataUrl转imagefunction dataUrl2Image() {let img = new Image()img.src = dataUrlreturn img}// dataUrl转canvasfunction dataUrl2Cnavas (dataUrl) {return new Promise((resolve, reject) => {let canvas = document.createElement('canvas')let content = canvas.getContext('2D')let img = new Image()img.onload = () => {canvas.width = img.widthcanvas.height = img.heightcanvas.drawImage(img,0,0)resolve(canvas)}img.src = dataUrl})}// file转blob?很少这么用,因为file就是一个blob对象了function file2Blob(file) {let reader = new fileReader(file)let arrayBf = reader.readAsArrayBuffer()return new Blob(arrayBf)}// canavas 转imagefunction canvas2Image (canvas) {let image = new Image()image.src = canvas.toDataURL('image/png', 1.0)return image}// blob 转filefunction blob2File(array, fileName) {let blobOrign = new Blob([array], {type: 'text/html'})let file = new File([blobOrign], fileName, {type: 'text/html'})return file}// blob/file 转 dataURLfunction blob2dataURL(blob) {return Promise((resolve, reject) => {let reader = new FileReader()reader.readAsDataURL(blob)reader.onload = (e) => {resolve(e.target.result)}})}
