网站首页 > 技术文章 正文
1. File
本质: 继承自Blob,表示用户文件系统中的文件
特性:
const file = new File(['content'], 'demo.txt', {
type: 'text/plain',
lastModified: Date.now()
});
console.log(file.name); // 'demo.txt'
console.log(file.size); // 7 (字节)
console.log(file.type); // 'text/plain'
2. Blob (Binary Large Object)
作用: 存储二进制数据的容器
创建方法:
// 从字符串创建
const blob1 = new Blob(['Hello World'], { type: 'text/plain' });
// 从ArrayBuffer创建
const buffer = new ArrayBuffer(8);
const blob2 = new Blob([buffer]);
// 合并Blob
const combined = new Blob([blob1, blob2]);
3. FileReader
核心方法:
const reader = new FileReader();
reader.onload = (e) => {
console.log(e.target.result);
};
reader.readAsText(blob); // 读取为文本
reader.readAsArrayBuffer(blob); // 读取为ArrayBuffer
reader.readAsDataURL(blob); // 读取为DataURL
4. ArrayBuffer
特性: 特性:固定长度的原始二进制缓冲区
操作方式:
const buffer = new ArrayBuffer(16);
const view = new Uint8Array(buffer);
view[0] = 255;
console.log(view); // Uint8Array [255, 0, 0, ...]
5. Base64
编码原理: 每3字节转换为4个ASCII字符
转换示例:
// 文本转Base64
btoa('Hello'); // 'SGVsbG8='
// Base64转文本
atob('SGVsbG8='); // 'Hello'
6. DataURL
格式: data:[<mediatype>][;base64],<data>
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...
转换关系大全
1. File <-> Blob
// File → Blob
const blob = file.slice(0, file.size, file.type);
// Blob → File
const file = new File([blob], 'filename', { type: blob.type });
2. Blob <-> ArrayBuffer
// Blob → ArrayBuffer
const reader = new FileReader();
reader.readAsArrayBuffer(blob);
reader.onload = () => {
const buffer = reader.result;
};
// ArrayBuffer → Blob
const newBlob = new Blob([buffer]);
3. Blob <-> DataURL
// Blob → DataURL
const reader = new FileReader();
reader.readAsDataURL(blob);
// DataURL → Blob
function dataURLtoBlob(dataurl) {
const arr = dataurl.split(','),
mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]),
n = bstr.length,
u8arr = newUint8Array(n);
while(n--) u8arr[n] = bstr.charCodeAt(n);
returnnew Blob([u8arr], { type: mime });
}
4. ArrayBuffer <-> Base64
// ArrayBuffer → Base64
function arrayBufferToBase64(buffer) {
let binary = '';
const bytes = newUint8Array(buffer);
for (let i = 0; i < bytes.byteLength; i++) {
binary += String.fromCharCode(bytes[i]);
}
return btoa(binary);
}
// Base64 → ArrayBuffer
function base64ToArrayBuffer(base64) {
const binaryString = atob(base64);
const len = binaryString.length;
const bytes = newUint8Array(len);
for (let i = 0; i < len; i++) {
bytes[i] = binaryString.charCodeAt(i);
}
return bytes.buffer;
}
小结
类型 | 内存占用 | 内存占用 | 适用场景 |
Blob | 低 | 快 | 文件存储/切片上传 |
ArrayBuffer | 最低 | 最快 | 二进制操作/WebSocket传输 |
DataURL | 高 | 慢 | 文件存储/切片上传 |
Object URL | 中 | 快 | 大文件预览 |
猜你喜欢
- 2025-04-27 【前端绝招】95%开发者不知道的10个神技巧!代码量直降50%!
- 2025-04-27 一起深入盘点 2025 年 React 发展的 10个趋势?
- 2025-04-27 心心念念的前端代码生成利器,前后端一网打尽
- 2025-04-27 为什么前端开发者都用Set代替Array去重?实测性能对比
- 2025-04-27 鸿蒙最终演示:前端的一些代码、服务端、数据库
- 2025-04-27 前端请求一到,后端就乱套?揭秘 Spring MVC 底层调用全流程!
- 2025-04-27 炸裂!用这 5 个黑科技,前端性能直接狂飙 200%!附全网最细代码
- 2025-04-27 掌握这几个网页前端技巧,开发效率提升
- 2025-04-27 大厂前端架构师私藏:微前端落地最全避坑指南
- 2025-04-27 前端学习保姆级教程,轻松入门 Web 开发
你 发表评论:
欢迎- 06-24发现一款开源宝藏级工作流低代码快速开发平台
- 06-24程序员危险了,这是一个 无代码平台+AI+code做项目的案例
- 06-24一款全新的工作流,低代码快速开发平台
- 06-24如何用好AI,改造自己的设计工作流?
- 06-24濮阳网站开发(濮阳网站建设)
- 06-24AI 如何重塑前端开发,我们该如何适应
- 06-24应届生靠这个Java简历模板拿下了5个offer
- 06-24服务端性能测试实战3-性能测试脚本开发
- 566℃Oracle分析函数之Lag和Lead()使用
- 564℃几个Oracle空值处理函数 oracle处理null值的函数
- 549℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 545℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 543℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 536℃【数据统计分析】详解Oracle分组函数之CUBE
- 526℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 518℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)