简介
@aws-sdk/chunked-blob-reader
是一个 npm 包,它为在浏览器上读取 AWS S3 对象提供了一种流式、分块、内存友好的方法。本文将介绍如何使用 @aws-sdk/chunked-blob-reader
包,包括安装和使用。
安装
使用 NPM 安装 @aws-sdk/chunked-blob-reader
:
npm install @aws-sdk/client-s3 @aws-sdk/chunked-blob-reader
使用
在前端页面引入
-- -------------------- ---- ------- ------- -------------- ------ - -------- - ---- --------------------- ------ - ----------------- - ---- ------------------------------- ----- -------- ----------------------- - ----- -- - --- ----------- ----- -------- - ----- -------------- ------- ------------ ---- ---------- --- ------ --- --------------------------------- - ----- --------- - ---------------- ----- ------ - ----- ------------------------ --- ----- ------ ----- -- ------- - -- ----- ----- - ---------
在 NodeJS 上使用
-- -------------------- ---- ------- ------ - -------- - ---- --------------------- ------ - ----------------- - ---- ------------------------------- ------ - -------- - ---- --------- ----- ------------- - -------------------------- ----- -- - --- ----------- ----- --------- - ---------------- ----- -------- - ----- -------------- ------- ------------ ---- --------- --- ----- ------ - --- --------------------------------- ----- -------- - --- ------------------------------------ ------------ --- - ----- ---------------- -- - ----- --- --- ----- ------ ----- -- ------- - ---------------------- - --------------- -- - ----------------- ---------- ---------------- ---
深入理解
@aws-sdk/chunked-blob-reader
为 AWS S3 的对象读取提供了一种 chunked-reading 的方式。它的设计目的是为分块的数据提供一种快速、流式、内存优化的读取方式,同时保留较低的读写负载和 CPU 开销。
当使用流的方式读取一个文件时,我们通常会将它分割成一个个的 chunks 交替进行写入和读出操作。在单个请求返回的大型数据中,可以通信少量的 chunk 来获取数据,然后按需自助加载内存,从而避免内存泄漏和内存超限的风险。
🔍 分块是意味着什么?
许多 AWS S3 对象是巨大的,它们无法一次加载到内存中。这意味着必须将数据拆分成较小部分,以便在不超过系统内存限制的情况下进行处理。将对象分成 chunks 并按 demand 加载它们可以解决这个问题。
@aws-sdk/chunked-blob-reader
充分利用了分块技术,将分块效果最大化。它只会下载有需要的 chunks,且仅下载一次,直到我们需要的 chunk 被下载为止。这种模式在处理大型文件时特别有用,因为可以降低对服务器和客户机的压力,使读取文件的方式更加有效率。
🔍 Chunk 是带有什么信息的?
- Limit:chunk 的最大大小
- ReadableStream:chunk 的内容流
- Headers:该 chunk 的元数据
函数
class ChunkedBlobReader { constructor(input: Blob | ReadableStream | ArrayBuffer | Uint8Array | null); [Symbol.asyncIterator](): AsyncGenerator<ArrayBuffer | null, void, undefined>; }
示例代码
读取 S3 对象
-- -------------------- ---- ------- ------ - -------- - ---- --------------------- ------ - ----------------- - ---- ------------------------------- ----- -------- ----------------------- - ----- -- - --- ----------- ----- -------- - ----- -------------- ------- ------------ ---- ---------- --- ------ --- --------------------------------- - ----- --------- - ---------------- ----- ------ - ----- ------------------------ --- ----- ------ ----- -- ------- - -- ----- ----- -
从 S3 下载文件
-- -------------------- ---- ------- ------ - -------- - ---- --------------------- ------ - ----------------- - ---- ------------------------------- ------ - -------- - ---- --------- ----- ------------- - -------------------------- ----- -- - --- ----------- ----- --------- - ---------------- ----- -------- - ----- -------------- ------- ------------ ---- --------- --- ----- ------ - --- --------------------------------- ----- -------- - --- ------------------------------------ ------------ --- - ----- ---------------- -- - ----- --- --- ----- ------ ----- -- ------- - ---------------------- - --------------- -- - ----------------- ---------- ---------------- ---
总结
在本文中,我们介绍了 npm 包 @aws-sdk/chunked-blob-reader
的使用教程,并深入讲解了该包的背后设计理念、chunk 单位概念,以及如何在浏览器和 NodeJS 上使用这个包。通过对本文的学习,读者可以了解到如何正确地读取 AWS S3 对象,并避免内存泄漏和内存超限的风险。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5f6f3edaa9b7065299ccba5d