Amazon S3 注意事项 - 适用于 JavaScript 的 Amazon SDK
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

适用于 JavaScript 的 Amazon SDKV3 API 参考指南详细描述了 适用于 JavaScript 的 Amazon SDK 版本 3 (V3) 的所有 API 操作。

Amazon S3 注意事项

Amazon S3 分段上传

在 v2 中,Amazon S3 客户端包含一个 upload() 操作,该操作支持利用 Amazon S3 提供的分段上传功能上传大型对象。

v3 中提供了 @aws-sdk/lib-storage 程序包。它支持 v2 upload() 操作提供的所有功能,同时支持 Node.js 和浏览器运行时。

Amazon S3 预签名 URL

在 v2 中,Amazon S3客户端包含 getSignedUrl()getSignedUrlPromise() 操作,用于生成 URL,供用户用来从 Amazon S3 上传或下载对象。

v3 中提供了 @aws-sdk/s3-request-presigner 程序包。该程序包包含 getSignedUrl() getSignedUrlPromise() 操作的函数。这篇博客文章对该程序包进行了详细探讨。

Amazon S3 区域重定向

如果向 Amazon S3 客户端传递了错误的区域,且随后引发 PermanentRedirect(状态码 301)错误,则 v3 的 Amazon S3 客户端会支持区域重定向(以前在 v2 中称为 Amazon S3 全局客户端)。您可以在客户端配置中使用 followRegionRedirects 标志,使 Amazon S3 客户端遵循区域重定向,并支持其作为全局客户端的功能。

注意

请注意,此功能可能会导致额外延迟,因为当收到状态码为 301 的 PermanentRedirect 错误时,系统会使用更正后的区域重试失败的请求。仅当您事先无法确定存储桶所在区域时,才应使用此功能。

Amazon S3 流式传输和缓冲响应

v3 SDK 倾向于不缓冲规模可能较大的响应。这种情况常见于 Amazon S3 的 GetObject 操作,该操作在 v2 中返回 Buffer,但在 v3 中返回 Stream

对于 Node.js,您必须使用流或对客户端及其请求处理程序进行垃圾回收,通过释放套接字来保持连接处于打开状态,以便处理新流量。

// v2 const get = await s3.getObject({ ... }).promise(); // this buffers consumes the stream already.
// v3, consume the stream to free the socket const get = await s3.getObject({ ... }); // object .Body has unconsumed stream const str = await get.Body.transformToString(); // consumes the stream // other ways to consume the stream include writing it to a file, // passing it to another consumer like an upload, or buffering to // a string or byte array.

有关更多信息,请参阅套接字耗尽部分。