本文详细解析前端开发中 File、Blob 与 Base64 三种数据格式的相互转换方法。涵盖 Blob 与 File 的属性差异及互转代码,以及利用 Canvas 和 FileReader API 实现 Base64 与二进制对象的转换技巧,帮助开发者高效处理图片上传与数据序列化。
一、类型简介
Blob(Binary Large Object,二进制大对象)是一种用于存储二进制数据的容器结构。在计算机系统中,它通常作为数据库字段类型,用于保存大型二进制文件。
| 属性名称 | 读/写 | 描述 |
|---|---|---|
| size | 只读 | Blob 对象中所包含数据的大小(字节)。 |
| type | 只读 | 一个字符串,表明该Blob对象所包含数据的MIME类型。如果类型未知,则该值为空字符串。例如 “image/png”. |
File 对象通常由用户在网页中通过 <input> 元素上传文件时生成的 FileList 对象提供,或通过拖放操作产生的 DataTransfer 对象获取。此外,开发者也可以在浏览器控制台中手动创建 File 实例。
| 属性名称 | 读/写 | 描述 |
|---|---|---|
| name | 只读 | 返回文件的名称.由于安全原因,返回的值并不包含文件路径 。 |
| type | 只读 | 返回 File 对象所表示文件的媒体类型(MIME)。例如 PNG 图像是 “image/png”. |
| lastModified | 只读 | number, 返回所引用文件最后修改日期,自 1970年1月1日0:00 以来的毫秒数。 |
| lastModifiedDate | 只读 | Date, 返回当前文件的最后修改日期,如果无法获取到文件的最后修改日期,则使用当前日期来替代。 |
| size | 只读 | File 对象中所包含数据的大小(字节)。 |
Base64 是一种广泛使用的编码方式,用于在网络上安全传输 8 位字节数据。其核心原理是将每 3 个字节的二进制数据编码为 4 个可打印字符。编码过程中,每 76 个字符会插入一个换行符,且末尾需处理结束符。
二、类型转换
1. BLOB 与 File
BLOB 转 File
const file = new File([blob], fileName, { type: fileType, lastModified: Date.now() });
File 转 BLOB
const blob = URL.createObjectURL(file);
2. BLOB 与 base64
BLOB(url) 转 base64
const image = new Image();
image.src = imgBlob;
image.onload = () => {
// 构建canvas节点
const canvas = document.createElement('canvas');
canvas.width = image.width;
canvas.height = image.height;
const context = canvas.getContext('2d');
context.drawImage(image, 0, 0, image.width, image.height);
// 转换
const imgBase64 = canvas.toDataURL();
console.log(imgBase64);
};
base64 转 BLOB
// 分割base64
const temp = base64Data.split(',');
// 获取类型
const mime = arr[0].match(/:(.*?);/)[1];
// 解码使用 base-64 编码的字符串
const raw = window.atob(temp[1]);
const rawLength = raw.length;
// base64文件数据读取
const uInt8Array = new Uint8Array(rawLength);
for (let i = 0; i < rawLength; i += 1) {
uInt8Array[i] = raw.charCodeAt(i);
}
const blob = new Blob([uInt8Array], { type: mime });
3. File 与 base64
File 转 base64
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function (e) {
// e.target.result 即为base64结果
console.log(e.target.result);
};
base64 转 File
// 分割base64
const arr = base64Data.split(',');
// 获取类型
const mime = arr[0].match(/:(.*?);/)[1];
// 解析base字符串
const bstr = atob(arr[1]);
const n = bstr.length;
// base64文件数据读取
const u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
const file = new File([u8arr], filename, { type: mime });
总结
到此这篇关于js前端技巧之图片格式转换(File、Blob、base64)的文章就介绍到这了,更多相关前端图片格式转换内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!