

 [适用于 JavaScript 的 AWS SDK V3 API 参考指南](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/)详细描述了 适用于 JavaScript 的 AWS SDK 版本 3 (V3) 的所有 API 操作。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon S3 注意事项
<a name="migrate-s3"></a>

## Amazon S3 分段上传
<a name="s3-multipart-upload"></a>

 在 v2 中，Amazon S3 客户端包含一个 [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#upload-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#upload-property) 操作，该操作支持利用 [Amazon S3 提供的分段上传功能](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html)上传大型对象。

 v3 中提供了 [https://github.com/aws/aws-sdk-js-v3/blob/main/lib/lib-storage](https://github.com/aws/aws-sdk-js-v3/blob/main/lib/lib-storage) 程序包。它支持 v2 `upload()` 操作提供的所有功能，同时支持 Node.js 和浏览器运行时。

## Amazon S3 预签名 URL
<a name="s3-presigned-url"></a>

 在 v2 中，Amazon S3客户端包含 [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getSignedUrl-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getSignedUrl-property) 和 [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getSignedUrlPromise-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getSignedUrlPromise-property) 操作，用于生成 URL，供用户用来从 Amazon S3 上传或下载对象。

 v3 中提供了 [https://github.com/aws/aws-sdk-js-v3/tree/main/packages/s3-request-presigner](https://github.com/aws/aws-sdk-js-v3/tree/main/packages/s3-request-presigner) 程序包。该程序包包含 `getSignedUrl()` 和 ` getSignedUrlPromise()` 操作的函数。这篇[博客文章](https://aws.amazon.com/blogs/developer/generate-presigned-url-modular-aws-sdk-javascript/)对该程序包进行了详细探讨。

## Amazon S3 区域重定向
<a name="s3-global-client-region-redirects"></a>

如果向 Amazon S3 客户端传递了错误的区域，且随后引发 ` PermanentRedirect`（状态码 301）错误，则 v3 的 Amazon S3 客户端会支持区域重定向（以前在 v2 中称为 Amazon S3 全局客户端）。您可以在客户端配置中使用 [https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-middleware-sdk-s3/Interface/S3InputConfig/](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-middleware-sdk-s3/Interface/S3InputConfig/) 标志，使 Amazon S3 客户端遵循区域重定向，并支持其作为全局客户端的功能。

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

## Amazon S3 流式传输和缓冲响应
<a name="amazon-s3-stream-vs-buffer"></a>

 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.
```

 有关更多信息，请参阅[套接字耗尽](https://github.com/aws/aws-sdk-js-v3/blob/main/supplemental-docs/CLIENTS.md#request-handler-requesthandler)部分。