dataURL

一种特殊的URL格式,区分于传统的URL, 传统的URL可以看得出来域名地址等,而DataURL看不出来
主要结构是
data:[<mediatype>][;base64],<data>

组成 含义
data: 前缀
[<mediatype>] MIME type 代表数据的类型
[;base64] 可选的base64标识
<data> 数据本身

blob

(binary large object),二进制大对象,是一个可以存储二进制文件的容器; 对象表示一个不可变、原始数据的类文件对象

将 blob 或 file 转成 DataURL(base64) 形式

  1. readBlob(somfile).then((data) => {
  2. console.log(data)
  3. })
  4. function readBlob(file) {
  5. return new Promise((resolve, reject)=> {
  6. let reader = new FileReader()
  7. reader.onload = (e) => {
  8. resovle(e.target.result)
  9. }
  10. reader.readAsDataURL(blob)
  11. })
  12. }

DataURL、Blob、 File、 Image之间的关系与转换

  1. // dataUrl 转成blob
  2. function dataUrl2Blob(dataUrl) {
  3. let arr = dataUrl.split(',') // 根据data:mimeType[;base64],<data>的形式拆分数据
  4. let mimeType = arr[0].match(/:(.*?);/)[1] // 获取mimeType
  5. let contentStr = atob(arr[1]) // 将base64转码成string; btoa表示将字符串转成base64
  6. let len = contentStr.length
  7. let u8arr = new Uint8Array(len)
  8. while(len--) {
  9. u8arr[len] = contentStr.charCodeAt(len)
  10. }
  11. // 拿到数据后生成
  12. return new blob([u8arr], {type: mimeType})
  13. }
  14. // dataUrl转image
  15. function dataUrl2Image() {
  16. let img = new Image()
  17. img.src = dataUrl
  18. return img
  19. }
  20. // dataUrl转canvas
  21. function dataUrl2Cnavas (dataUrl) {
  22. return new Promise((resolve, reject) => {
  23. let canvas = document.createElement('canvas')
  24. let content = canvas.getContext('2D')
  25. let img = new Image()
  26. img.onload = () => {
  27. canvas.width = img.width
  28. canvas.height = img.height
  29. canvas.drawImage(img,0,0)
  30. resolve(canvas)
  31. }
  32. img.src = dataUrl
  33. })
  34. }
  35. // file转blob?很少这么用,因为file就是一个blob对象了
  36. function file2Blob(file) {
  37. let reader = new fileReader(file)
  38. let arrayBf = reader.readAsArrayBuffer()
  39. return new Blob(arrayBf)
  40. }
  41. // canavas 转image
  42. function canvas2Image (canvas) {
  43. let image = new Image()
  44. image.src = canvas.toDataURL('image/png', 1.0)
  45. return image
  46. }
  47. // blob 转file
  48. function blob2File(array, fileName) {
  49. let blobOrign = new Blob([array], {type: 'text/html'})
  50. let file = new File([blobOrign], fileName, {type: 'text/html'})
  51. return file
  52. }
  53. // blob/file 转 dataURL
  54. function blob2dataURL(blob) {
  55. return Promise((resolve, reject) => {
  56. let reader = new FileReader()
  57. reader.readAsDataURL(blob)
  58. reader.onload = (e) => {
  59. resolve(e.target.result)
  60. }
  61. })
  62. }