Kros的博客 Kros的博客
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云

Kros

凡心所向,素履以往,生如逆旅,一苇以航
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云
  • CSS

  • JavaScript

  • 工具

    • git命令行
    • uniapp小程序分包配置
    • VScode使用Todo tree实现待办查看
    • activiti editor添加自定义属性
    • uniapp使用svg
    • windows端口查看及关闭端口
    • uniapp通过wifi无线运行到手机
    • android生成证书文件
    • vscode中显示换行指示线
    • 浏览器console输出自定义样式内容
    • console的非常规用法
    • uniapp App升级更新
    • 从零开始搭建脚手架1
    • vite打包插件上传到npm
    • uniapp使用speech模块遇到的问题
    • HbuilderX使用MuMu模拟器
    • HbuilderX调试app页面元素
    • 前端工程化的理解
    • console log打印obj非实时性数据问题
    • 常见http状态码
    • HbuilderX配置自定义打包环境
    • webpack优缺点
    • axios和ajax的区别
    • 使用docxtemplater导出word文件
    • docxtemplater循环列表数据导出
    • js打开钉钉打卡页面
    • uniapp配置自定义环境变量和条件编译变量
    • 文件上传时的各种二进制数据关系
    • 解决开发过程中的跨域问题
    • vue自定义入口html文件
    • tsParticles局部粒子效果
    • 使用verdaccio搭建私人npm仓库
  • Vue

  • antdv踩坑记录

  • Vue3

  • 前端
  • 工具
kros
2024-04-22

文件上传时的各种二进制数据关系

在文件上传和下载时用到了多种二进制数据格式如:ArrayBuffer、Uint8Array、Blob、File等,这些数据之间很容易产生混淆,但如果我们理清了转化关系后其实也没那么复杂。

# ArrayBuffer

ArrayBuffer通常用来表示一段二进制缓冲区也就是表示一段内存地址。它并不存储具体数据,只是作为数据的映射,通过用来储存音视频、文件等大媒体文件 我们可以通过以下方法手动创建,或者使用Base64或本地文件来获取缓冲区

const buffer = new ArrayBuffer(128)
console.log(buffer.byteLength) // 128
1
2

ArrayBuffer不能直接访问,也就说我们不能使用buffer[index]获取数据,要读取buffer内容必须使用TypeArray 或DataView

# Unit8Array

Uint8Array是TypeArray的一种,它属于TypeArray的子类,我们可以使用Uint8Array来读取buffer中的内容,如下:

const buffer = new ArrayBuffer(128)
const uint8 = new Uint8Array(buffer)
console.log(uint8.byteLenth) // 128
console.log(uint8.length) // 128

const uint32 = new Uint32Array(buffer)
console.log(uint32.byteLength) // 128
console.log(uint32.length) // 32
1
2
3
4
5
6
7
8

TypeArray

使用Uint8Array表示使用每子节8位来读取数据,也就是说ArrayBuffer的数据会一一对应该Uint8Array创建的数组上,同理如果使用Uint16Array或Uint32Array会将2字节、4字节对应到分别的数组上。更多TypeArray见TypeArray子类

# Blob

在 JavaScript 中,Blob(Binary Large Object)对象用于表示不可变的、原始的二进制数据。它可以用来存储文件、图片、音频、视频、甚至是纯文本等各种类型的数据。Blob 提供了一种高效的方式来操作数据文件,而不需要将数据全部加载到内存中,这在处理大型文件或二进制数据时非常有用。

使用场景:

  1. 生成文件下载 可以通过 Blob 创建文件并生成下载链接供用户下载文件。
onst blob = new Blob(["This is a test file."], { type: "text/plain" });
const url = URL.createObjectURL(blob); // 创建一个 Blob URL
const a = document.createElement("a");
a.href = url;
a.download = "test.txt";
a.click();
URL.revokeObjectURL(url); // 释放 URL 对象
1
2
3
4
5
6
7
  1. 上传文件 可以通过 FormData 对象将 Blob 作为文件上传到服务器
const formData = new FormData();
formData.append("file", blob, "example.txt");

fetch("/upload", {
  method: "POST",
  body: formData,
}).then((response) => {
  console.log("File uploaded successfully");
});
1
2
3
4
5
6
7
8
9
  1. 读取图片或文件 通过 FileReader API 可以将 Blob 对象读取为不同的数据格式。举例来说,你可以将 Blob 读取为图片并显示在页面上

# File

File 是 JavaScript 中代表文件的数据结构,它继承自Blob对象,包含文件的元数据(如文件名、文件大小、类型等)。File 对象通常由用户通过<input type="file">选择文件时创建,也可以使用 JavaScript 构造函数手动创建。 File 对象继承了 Blob 对象的方法,因此可以使用一些 Blob 对象的方法来处理文件数据。 ile 是 Blob 的子类,File 对象除了具有 Blob 的所有属性和方法之外,还包含文件的元数据,如文件名和修改日期。

你可以将 File 对象看作是带有文件信息的 Blob。

上次更新: 2025/09/05, 8:09:00
uniapp配置自定义环境变量和条件编译变量
解决开发过程中的跨域问题

← uniapp配置自定义环境变量和条件编译变量 解决开发过程中的跨域问题→

最近更新
01
Find the next perfect square
09-05
02
Regex validate PIN code
09-05
03
Find the odd int
09-05
更多文章>
Theme by Vdoing | Copyright © 2020-2025 kros king
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
icon-heart-o icon-heart icon-infinity icon-pause icon-play link next prev