当前位置: 首页 > news >正文

JS二进制文件转换:File、Blob、Base64、ArrayBuffer

类型转换

1. Blob、File → Base64

function fileToDataURL(file) {let reader = new FileReader();reader.readAsDataURL(file);reader.onload = function (e) {return reader.result;};
}

2. Base64 → Blob、File

// Base64 转为 Blob
function dataURLToBlob(fileDataURL) {let arr = fileDataURL.split(","),mime = arr[0].match(/:(.*?);/)[1],bstr = atob(arr[1]),n = bstr.length,u8arr = new Uint8Array(n);while (n--) {u8arr[n] = bstr.charCodeAt(n);}return new Blob([u8arr], { type: mime });
}// Base64 转为 File
function dataURLToBlob(fileDataURL, filename) {let arr = fileDataURL.split(","),mime = arr[0].match(/:(.*?);/)[1],bstr = atob(arr[1]),n = bstr.length,u8arr = new Uint8Array(n);while (n--) {u8arr[n] = bstr.charCodeAt(n);}return new File([u8arr], filename, { type: mime });
}

3. Blob、File → Object URL

// object:用于创建 URL 的 File 对象、Blob 对象
const objectUrl = URL.createObjectURL(object)

4. ArrayBuffer → Blob

const blob = new Blob([new Uint8Array(buffer, byteOffset, length)])

5. ArrayBuffer → base64

const base64 = btoa(String.fromCharCode.apply(null, new Uint8Array(arrayBuffer)))

6. Blob → ArrayBuffer

function blobToArrayBuffer (blob) { const reader = new FileReader()reader.readAsArrayBuffer(blob)reader.onload = () =>{return reader.result;}
}

7. Blob、File 文件数据绘制到 canvas

// 思路:Blob、File ——> dataURL(Base64) ——> canvas
function fileAndBlobToCanvas(fileDataURL) {let img = new Image()img.src = fileDataURLlet canvas = document.createElement('canvas')if (!canvas.getContext) {alert('浏览器不支持canvas')return}let ctx = canvas.getContext('2d')document.getElementById('container').appendChild(canvas)img.onload = function () {ctx.drawImage(img, 0, 0, img.width, img.height)}
}

8. 从 canvas 中获取文件 Base64

function canvasToDataURL() {let canvas = document.createElement('canvas')let canvasDataURL = canvas.toDataURL('image/png', 1.0)return canvasDataURL
}


http://www.lryc.cn/news/308018.html

相关文章:

  • 编译opencv gpu版的条件
  • List集合的Stream流式操作实现数据类型转换
  • Ubuntu 20.04.6 LTS下edge浏览器点击图标没反应
  • php基础学习之错误处理(其一)
  • Nginx 解析漏洞复现
  • JQMobile Loader Widget 遮罩层改造
  • 练习 2 Web [ACTF2020 新生赛]BackupFile 1
  • 【python】subprocess用法示例
  • Socket网络编程(三)——TCP快速入门
  • 皇冠测评:网络电视盒子哪个品牌好?电视盒子排行榜
  • simple-pytest 框架使用指南
  • React中使用useActive
  • ElasticSearch安装和kibana控制台安装
  • VSCode安装与使用详细教程
  • 土壤墒情监测站的工作原理
  • Flutter 多标签页显示 有关TabController需要知道的知识
  • 【Elasticsearch专栏 16】深入探索:Elasticsearch的Master选举机制及其影响因素分析
  • Leetcode : 215. 数组中的第 K 个最大元素
  • node express实现Excel文档转json文件
  • 【算法分析与设计】最大二叉树
  • 面试问答总结之并发编程
  • 红外测温仪芯片方案开发设计
  • 五、数组——Java基础篇
  • 如何用golang写一个自己的后端框架
  • linux 如何给服务器批量做免密,如何批量挂在磁盘
  • Android Activity的生命周期详解
  • python学习笔记-内置类型
  • 校园微社区微信小程序源码/二手交易/兼职交友微信小程序源码
  • 如何在 Angular 中使用 NgTemplateOutlet 创建可重用组件
  • 改进的yolo交通标志tt100k数据集目标检测(代码+原理+毕设可用)