

适用于 JavaScript 的 AWS SDK v2 已终止支持。建议您迁移到 [适用于 JavaScript 的 AWS SDK v3](https://docs.aws.amazon.com//sdk-for-javascript/v3/developer-guide/)。有关更多详情和如何迁移的信息，请参阅本[公告](https://aws.amazon.com/blogs//developer/announcing-end-of-support-for-aws-sdk-for-javascript-v2/)。

# 创建和使用 Amazon S3 存储桶
<a name="s3-example-creating-buckets"></a>

![\[JavaScript code example that applies to Node.js execution\]](http://docs.aws.amazon.com/zh_cn/sdk-for-javascript/v2/developer-guide/images/nodeicon.png)

**此 Node.js 代码示例演示：**
+ 如何获取和显示账户中 Amazon S3 桶的列表。
+ 如何创建 Amazon S3 存储桶。
+ 如何将对象上传到指定的存储桶。

## 情景
<a name="s3-example-creating-buckets-scenario"></a>

本示例使用一系列 Node.js 模块来获取现有 Amazon S3 桶的列表、创建桶并将文件上传到指定桶。这些 Node.js 模块使用 SDK for JavaScript，通过 Amazon S3 客户端类的以下方法从 Amazon S3 桶获取信息和将文件上传到该桶：
+ [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#listBuckets-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#listBuckets-property)
+ [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#createBucket-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#createBucket-property)
+ [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#listObjects-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#listObjects-property)
+ [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#upload-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#upload-property)
+ [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#deleteBucket-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#deleteBucket-property)

## 先决条件任务
<a name="s3-example-creating-buckets-prerequisites"></a>

要设置和运行此示例，您必须先完成以下任务：
+ 安装 Node.js。有关安装 Node.js 的更多信息，请参阅 [Node.js 网站](https://nodejs.org)。
+ 使用用户凭证创建共享配置文件。有关提供共享凭证文件的更多信息，请参阅[从共享凭证文件加载 Node.js 中的凭证](loading-node-credentials-shared.md)。

## 配置 SDK
<a name="s3-example-creating-buckets-configure-sdk"></a>

通过创建全局配置对象然后为代码设置区域，来配置 SDK for JavaScript。在此示例中，区域设置为 `us-west-2`。

```
// Load the SDK for JavaScript
var AWS = require('aws-sdk');
// Set the Region 
AWS.config.update({region: 'us-west-2'});
```

## 显示 Amazon S3 桶的列表
<a name="s3-example-creating-buckets-list-buckets"></a>

创建文件名为 `s3_listbuckets.js` 的 Node.js 模块。确保按前面所示配置开发工具包。要访问 Amazon Simple Storage Service，请创建一个 `AWS.S3` 服务对象。调用 Amazon S3 服务对象的 `listBuckets` 方法来检索桶列表。回调函数的 `data` 参数具有 `Buckets` 属性，包含用于表示存储桶的映射数组。通过登录到控制台显示存储桶列表。

```
// Load the AWS SDK for Node.js
var AWS = require("aws-sdk");
// Set the region
AWS.config.update({ region: "REGION" });

// Create S3 service object
s3 = new AWS.S3({ apiVersion: "2006-03-01" });

// Call S3 to list the buckets
s3.listBuckets(function (err, data) {
  if (err) {
    console.log("Error", err);
  } else {
    console.log("Success", data.Buckets);
  }
});
```

要运行示例，请在命令行中键入以下内容。

```
node s3_listbuckets.js
```

此示例代码可在 [GitHub 上的此处](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/javascript/example_code/s3/s3_listbuckets.js)找到。

## 创建 Amazon S3 存储桶
<a name="s3-example-creating-buckets-new-bucket"></a>

创建文件名为 `s3_createbucket.js` 的 Node.js 模块。确保按前面所示配置开发工具包。创建 `AWS.S3` 服务对象。模块将获取单个命令行参数来指定新存储桶的名称。

添加变量来保存用于调用 Amazon S3 服务对象的 `createBucket` 方法的参数，其中包括新创建的桶的名称。在 Amazon S3 成功创建新桶后，回调函数将新桶的位置记录到控制台中。

```
// Load the AWS SDK for Node.js
var AWS = require("aws-sdk");
// Set the region
AWS.config.update({ region: "REGION" });

// Create S3 service object
s3 = new AWS.S3({ apiVersion: "2006-03-01" });

// Create the parameters for calling createBucket
var bucketParams = {
  Bucket: process.argv[2],
};

// call S3 to create the bucket
s3.createBucket(bucketParams, function (err, data) {
  if (err) {
    console.log("Error", err);
  } else {
    console.log("Success", data.Location);
  }
});
```

要运行示例，请在命令行中键入以下内容。

```
node s3_createbucket.js BUCKET_NAME
```

此示例代码可在 [GitHub 上的此处](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/javascript/example_code/s3/s3_createbucket.js)找到。

## 将文件上传到 Amazon S3 桶
<a name="s3-example-creating-buckets-upload-file"></a>

创建文件名为 `s3_upload.js` 的 Node.js 模块。确保按前面所示配置开发工具包。创建 `AWS.S3` 服务对象。此模块将获取两个命令行参数，第一个用于指定目标存储桶，第二个用于指定要上传的文件。

使用调用 Amazon S3 服务对象的 `upload` 方法所需的参数创建变量。在 `Bucket` 参数中提供目标存储桶的名称。`Key` 参数设置为所选文件的名称，您可使用 Node.js `path` 模块来获取该名称。`Body` 参数设置为文件的内容，您可从 Node.js `createReadStream` 模块使用 `fs` 来获取。

```
// Load the AWS SDK for Node.js
var AWS = require("aws-sdk");
// Set the region
AWS.config.update({ region: "REGION" });

// Create S3 service object
var s3 = new AWS.S3({ apiVersion: "2006-03-01" });

// call S3 to retrieve upload file to specified bucket
var uploadParams = { Bucket: process.argv[2], Key: "", Body: "" };
var file = process.argv[3];

// Configure the file stream and obtain the upload parameters
var fs = require("fs");
var fileStream = fs.createReadStream(file);
fileStream.on("error", function (err) {
  console.log("File Error", err);
});
uploadParams.Body = fileStream;
var path = require("path");
uploadParams.Key = path.basename(file);

// call S3 to retrieve upload file to specified bucket
s3.upload(uploadParams, function (err, data) {
  if (err) {
    console.log("Error", err);
  }
  if (data) {
    console.log("Upload Success", data.Location);
  }
});
```

要运行示例，请在命令行中键入以下内容。

```
node s3_upload.js BUCKET_NAME FILE_NAME
```

此示例代码可在 [GitHub 上的此处](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/javascript/example_code/s3/s3_upload.js)找到。

## 列出 Amazon S3 桶中的对象
<a name="s3-example-listing-objects"></a>

创建文件名为 `s3_listobjects.js` 的 Node.js 模块。确保按前面所示配置开发工具包。创建 `AWS.S3` 服务对象。

添加变量来保存用于调用 Amazon S3 服务对象的 `listObjects` 方法的参数，其中包括要读取的桶的名称。回调函数记录对象（文件）列表或失败消息。

```
// Load the AWS SDK for Node.js
var AWS = require("aws-sdk");
// Set the region
AWS.config.update({ region: "REGION" });

// Create S3 service object
s3 = new AWS.S3({ apiVersion: "2006-03-01" });

// Create the parameters for calling listObjects
var bucketParams = {
  Bucket: "BUCKET_NAME",
};

// Call S3 to obtain a list of the objects in the bucket
s3.listObjects(bucketParams, function (err, data) {
  if (err) {
    console.log("Error", err);
  } else {
    console.log("Success", data);
  }
});
```

要运行示例，请在命令行中键入以下内容。

```
node s3_listobjects.js
```

此示例代码可在 [GitHub 上的此处](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/javascript/example_code/s3/s3_listobjects.js)找到。

## 删除 Amazon S3 桶
<a name="s3-example-deleting-buckets"></a>

创建文件名为 `s3_deletebucket.js` 的 Node.js 模块。确保按前面所示配置开发工具包。创建 `AWS.S3` 服务对象。

添加变量来保存用于调用 Amazon S3 服务对象的 `createBucket` 方法的参数，其中包括要删除的桶的名称。存储桶必须为空才能将其删除。回调函数记录成功或失败消息。

```
// Load the AWS SDK for Node.js
var AWS = require("aws-sdk");
// Set the region
AWS.config.update({ region: "REGION" });

// Create S3 service object
s3 = new AWS.S3({ apiVersion: "2006-03-01" });

// Create params for S3.deleteBucket
var bucketParams = {
  Bucket: "BUCKET_NAME",
};

// Call S3 to delete the bucket
s3.deleteBucket(bucketParams, function (err, data) {
  if (err) {
    console.log("Error", err);
  } else {
    console.log("Success", data);
  }
});
```

要运行示例，请在命令行中键入以下内容。

```
node s3_deletebucket.js
```

此示例代码可在 [GitHub 上的此处](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/javascript/example_code/s3/s3_deletebucket.js)找到。