前后端数据交换在一些情况下需要传输大量数据(特别是文件上传/下载时),此处主要还是下载的场景。通常来说后端返回二进制数据流,前端可以指定响应头为 blob 或者 arraybuffer。通常来讲如果这个文件是需要下载的文件使用 blob 类型,然后前端创建一个 a 标签触发下载,在图像、音视频(流媒体)则会使用 arraybuffer 类型,然后前端在进行相应处理。
ArrayBuffer
ArrayBuffer 是 JavaScript 里用于表示二进制数据的底层数据结构,在处理二进制数据(像文件、网络请求、图像等)时非常实用。
ArrayBuffer 是一段固定长度的二进制数据缓冲区,在内存中以连续的字节序列形式存在。一旦创建,其长度便不可更改。不能直接操作 ArrayBuffer 中的数据,而是要通过视图(如 DataView、TypedArray)来对其进行读写操作。
Blob
在 JavaScript 中,Blob(Binary Large Object)对象代表了不可变的、原始数据的类文件对象。它与文件相似,但不一定来源于文件系统。
Blob 对象用来存储二进制数据,它可以包含文本、图片、音频、视频等各种类型的数据。它是不可变的,意味着一旦创建,其内容就不能被直接修改。
ArrayBuffer、Blob、Base64 互转
ArrayBuffer 转 Blob
1 | const arrayBufferToBlob = function ( |
ArrayBuffer 转 Base64
1 | const arrayBufferToBase64 = function (buffer: ArrayBuffer): string { |
Blob 转 ArrayBuffer
1 | const blobToArrayBuffer = async function (blob: Blob): Promise<ArrayBuffer> { |
Blob 转 Base64
1 | const blobToBase64 = async function (blob: Blob): Promise<string> { |
Base64 转 ArrayBuffer
1 | const base64ToArrayBuffer = function (base64: string): ArrayBuffer { |
Base64 转 Blob
1 | const base64ToBlob = function ( |
[越努力,越幸运!]