Amazon SDK for JavaScriptV3 API 参考指南详细描述了Amazon SDK for JavaScript版本 3 (V3) 的所有 API 操作。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建和使用 Amazon S3 存储桶
此 Node.js 代码示例演示:
-
如何获取和显示账户中的 Amazon S3 存储桶列表。
-
如何创建 Amazon S3 存储桶。
-
如何将对象上传到指定的存储桶。
场场场场景
在此示例中,使用了一系列 Node.js 模块来获取现有 Amazon S3 存储桶的列表、创建存储桶以及将文件上传到指定存储桶。这些 Node.js 模块使用的 SDK 通过 Amazon S3 客户端类的以下方法从 Amazon S3 存储桶获取信息并将文件上传到 Amazon S3 存储桶: JavaScript
先场景
要设置和运行此示例,您必须先完成以下任务:
-
按照中的说明设置项目环境以运行 Node JavaScript 示例 GitHub
。 -
使用用户凭证创建共享配置文件。有关提供共享凭证文件的更多信息,请参阅从共享凭证文件加载 Node.js 中的凭证。
这些示例演示了如何使用 ECMAScript6 (ES6) 导入/导出客户端服务对象和命令。
这需要 Node.js 13.x 或更高版本。要下载并安装最新版本的 Node.js,请参阅 Node.js 下载。
。 如果你更喜欢使用 CommonJS 语法,请参阅JavaScript es6/CommonJS 语法。
显示 Amazon S3 存储桶的列表
创建一个libs
目录,然后使用该文件名创建 Node.js 模块s3Client.js
。将以下代码复制并粘贴到其中,这将创建 Amazon S3 客户端对象。将 RE G
ION 替换为您的Amazon区域。
// Create service client module using ES6 syntax. import { S3Client } from "@aws-sdk/client-s3"; // Set the AWS Region. const REGION = "us-east-1"; // Create an Amazon S3 service client object. const s3Client = new S3Client({ region: REGION }); export { s3Client };
此代码可在此处获得 GitHub
创建文件名为 s3_listbuckets.js
的 Node.js 模块。确保按照前面所示配置 SDK,包括安装所需的客户端和软件包。要访问亚马逊简单存储服务,请创建一个S3
客户端服务对象。调用 Amazon S3 客户端服务对象的listBuckets
方法来检索您的存储桶列表。回调函数的 data
参数具有 Buckets
属性,包含用于表示存储桶的映射数组。通过登录到控制台显示存储桶列表。
// Import required AWS SDK clients and commands for Node.js. import { ListBucketsCommand } from "@aws-sdk/client-s3"; import { s3Client } from "./libs/s3Client.js"; // Helper function that creates an Amazon S3 service client module. export const run = async () => { try { const data = await s3Client.send(new ListBucketsCommand({})); console.log("Success", data.Buckets); return data; // For unit tests. } catch (err) { console.log("Error", err); } }; run();
要运行示例,请在命令提示符处输入以下内容。
node s3_listbuckets.js
此示例代码可以在此处找到 GitHub
创建 Amazon S3 存储桶
创建一个libs
目录,然后使用该文件名创建 Node.js 模块s3Client.js
。将以下代码复制并粘贴到其中,这将创建 Amazon S3 客户端对象。将 RE G
ION 替换为您的Amazon区域。
// Create service client module using ES6 syntax. import { S3Client } from "@aws-sdk/client-s3"; // Set the AWS Region. const REGION = "us-east-1"; // Create an Amazon S3 service client object. const s3Client = new S3Client({ region: REGION }); export { s3Client };
此代码可在此处获得 GitHub
创建文件名为 s3_createbucket.js
的 Node.js 模块。确保按照前面所示配置 SDK,包括安装所需的客户端和软件包。创建S3
客户端服务对象。模块将获取单个命令行参数来指定新存储桶的名称。
添加一个变量来保存用于调用 Amazon S3 客户端服务对象createBucket
方法的参数,包括新创建的存储桶的名称。在 Amazon S3 成功创建新存储桶后,回调函数将新存储桶的位置记录到控制台。
// Get service clients module and commands using ES6 syntax. import { CreateBucketCommand } from "@aws-sdk/client-s3"; import { s3Client } from "./libs/s3Client.js"; // Set the bucket parameters. export const bucketParams = { Bucket: "BUCKET_NAME" }; // Create the Amazon S3 bucket. export const run = async () => { try { const data = await s3Client.send(new CreateBucketCommand(bucketParams)); console.log("Success", data); return data; // For unit tests. } catch (err) { console.log("Error", err); } }; run();
要运行示例,请在命令提示符处输入以下内容。
node s3_createbucket.js
此示例代码可以在此处找到 GitHub
将文件上传到 Amazon S3 存储桶
本节介绍如何:
创建新对象并将其上传到 Amazon S3 存储桶。
将现有对象上传到 Amazon S3 存储桶。
创建对象并将其上传到 Amazon S3 存储桶
创建一个libs
目录,然后使用该文件名创建 Node.js 模块s3Client.js
。将以下代码复制并粘贴到其中,这将创建 Amazon S3 客户端对象。将 RE G
ION 替换为您的Amazon区域。
// Create service client module using ES6 syntax. import { S3Client } from "@aws-sdk/client-s3"; // Set the AWS Region. const REGION = "us-east-1"; // Create an Amazon S3 service client object. const s3Client = new S3Client({ region: REGION }); export { s3Client };
此代码可在此处获得 GitHub
创建文件名为 s3_create_and_upload_object.js
的 Node.js 模块。确保按照前面所示配置 SDK,包括安装所需的客户端和软件包。
使用调用 Amazon S3 服务对象的PutObjectCommand
方法所需的参数创建变量。在 Bucket
参数中提供目标存储桶的名称。对于Key
参数,提供对象的名称。
要为对象创建目录,请使用格式directoryY_NAME/OBJECT_NAME
。
// Import required AWS SDK clients and commands for Node.js. import { PutObjectCommand } from "@aws-sdk/client-s3"; import { s3Client } from "./libs/s3Client.js"; // Helper function that creates an Amazon S3 service client module. // Set the parameters. export const bucketParams = { Bucket: "BUCKET_NAME", // Specify the name of the new object. For example, 'index.html'. // To create a directory for the object, use '/'. For example, 'myApp/package.json'. Key: "OBJECT_NAME", // Content of the new object. Body: "BODY", }; // Create and upload the object to the S3 bucket. export const run = async () => { try { const data = await s3Client.send(new PutObjectCommand(bucketParams)); return data; // For unit tests. console.log( "Successfully uploaded object: " + bucketParams.Bucket + "/" + bucketParams.Key ); } catch (err) { console.log("Error", err); } }; run();
要运行示例,请在命令提示符处输入以下内容。
node s3_create_and_upload_object.js
此示例代码可以在此处找到 GitHub
将现有对象上传到 Amazon S3 存储桶
创建一个libs
目录,然后使用该文件名创建 Node.js 模块s3Client.js
。将以下代码复制并粘贴到其中,这将创建 Amazon S3 客户端对象。将 RE G
ION 替换为您的Amazon区域。
// Create service client module using ES6 syntax. import { S3Client } from "@aws-sdk/client-s3"; // Set the AWS Region. const REGION = "us-east-1"; // Create an Amazon S3 service client object. const s3Client = new S3Client({ region: REGION }); export { s3Client };
此代码可在此处获得 GitHub
创建文件名为 s3_upload_object.js
的 Node.js 模块。确保按照前面所示配置 SDK,包括安装所需的客户端和软件包。
使用调用 Amazon S3 服务对象的PutObjectCommand
方法所需的参数创建变量。在 Bucket
参数中提供目标存储桶的名称。提供现有对象的名称及其路径。Key
参数设置为所选文件的名称,您可使用 Node.js path
模块来获取该名称。
// Import required AWS SDK clients and commands for Node.js. import { PutObjectCommand } from "@aws-sdk/client-s3"; import { s3Client } from "./libs/s3Client.js"; // Helper function that creates an Amazon S3 service client module. import {path} from "path"; import {fs} from "fs"; const file = "OBJECT_PATH_AND_NAME"; // Path to and name of object. For example '../myFiles/index.js'. const fileStream = fs.createReadStream(file); // Set the parameters export const uploadParams = { Bucket: "BUCKET_NAME", // Add the required 'Key' parameter using the 'path' module. Key: path.basename(file), // Add the required 'Body' parameter Body: fileStream, }; // Upload file to specified bucket. export const run = async () => { try { const data = await s3Client.send(new PutObjectCommand(uploadParams)); console.log("Success", data); return data; // For unit tests. } catch (err) { console.log("Error", err); } }; run();
要运行示例,请在命令提示符处输入以下内容。
node s3_upload_object.js
此示例代码可以在此处找到 GitHub
从 Amazon S3 存储桶获取文件
创建一个libs
目录,然后使用该文件名创建 Node.js 模块s3Client.js
。将以下代码复制并粘贴到其中,这将创建 Amazon S3 客户端对象。将 RE G
ION 替换为您的Amazon区域。
// Create service client module using ES6 syntax. import { S3Client } from "@aws-sdk/client-s3"; // Set the AWS Region. const REGION = "us-east-1"; // Create an Amazon S3 service client object. const s3Client = new S3Client({ region: REGION }); export { s3Client };
此代码可在此处获得 GitHub
创建文件名为 s3_getobject.js
的 Node.js 模块。确保按照前面所示配置 SDK,包括安装所需的客户端和软件包。该模块将采用两个命令行参数,第一个用于指定目标存储桶,第二个用于指定要获取的文件。
使用调用 Amazon S3 服务对象的GetObjectCommand
方法所需的参数创建变量。在 Bucket
参数中提供目标存储桶的名称。Key
参数设置为文件名,您可以使用 Node.jspath
模块获得该文件名。
// Import required AWS SDK clients and commands for Node.js. import { GetObjectCommand } from "@aws-sdk/client-s3"; import { s3Client } from "./libs/s3Client.js"; // Helper function that creates an Amazon S3 service client module. export const bucketParams = { Bucket: "BUCKET_NAME", Key: "KEY", }; export const run = async () => { try { // Get the object} from the Amazon S3 bucket. It is returned as a ReadableStream. const data = await s3Client.send(new GetObjectCommand(bucketParams)); // Convert the ReadableStream to a string. return await data.Body.transformToString(); } catch (err) { console.log("Error", err); } }; run();
要运行示例,请在命令提示符处输入以下内容。
node s3_upload.js
此示例代码可以在此处找到 GitHub
列出 Amazon S3 存储桶中的对象
此示例列出 Amazon S3 存储桶中的多达 1000 个对象。
要列出 1000 多个对象,请参阅列出 Amazon S3 存储桶中的 1000 多个对象。
创建一个libs
目录,然后使用该文件名创建 Node.js 模块s3Client.js
。将以下代码复制并粘贴到其中,这将创建 Amazon S3 客户端对象。将 RE G
ION 替换为您的Amazon区域。
// Create service client module using ES6 syntax. import { S3Client } from "@aws-sdk/client-s3"; // Set the AWS Region. const REGION = "us-east-1"; // Create an Amazon S3 service client object. const s3Client = new S3Client({ region: REGION }); export { s3Client };
此代码可在此处获得 GitHub
创建文件名为 s3_listobjects.js
的 Node.js 模块。确保按照前面所示配置 SDK,包括安装所需的客户端和软件包。
添加一个变量来保存用于调用 Amazon S3 服务对象ListObjectsCommnad
方法的参数,包括要读取的存储桶的名称。回调函数记录对象(文件)列表或失败消息。
// Import required AWS SDK clients and commands for Node.js. import { ListObjectsCommand } from "@aws-sdk/client-s3"; import { s3Client } from "./libs/s3Client.js"; // Helper function that creates an Amazon S3 service client module. // Create the parameters for the bucket export const bucketParams = { Bucket: "BUCKET_NAME" }; export const run = async () => { try { const data = await s3Client.send(new ListObjectsCommand(bucketParams)); console.log("Success", data); return data; // For unit tests. } catch (err) { console.log("Error", err); } }; run();
要运行示例,请在命令提示符处输入以下内容。
node s3_listobjects.js
此示例代码可以在此处找到 GitHub
列出 Amazon S3 存储桶中的 1000 多个对象
此示例列出 Amazon S3 存储桶中的 1000 多个对象。
创建一个libs
目录,然后使用该文件名创建 Node.js 模块s3Client.js
。将以下代码复制并粘贴到其中,这将创建 Amazon S3 客户端对象。将 RE G
ION 替换为您的Amazon区域。
// Create service client module using ES6 syntax. import { S3Client } from "@aws-sdk/client-s3"; // Set the AWS Region. const REGION = "us-east-1"; // Create an Amazon S3 service client object. const s3Client = new S3Client({ region: REGION }); export { s3Client };
此代码可在此处获得 GitHub
创建文件名为 s3_list1000plusobjects.js
的 Node.js 模块。确保按照前面所示配置 SDK,包括安装所需的客户端和软件包。创建S3
客户端服务对象。
使用 while 循环列出每 1000 个项目,直到列出所有项目。然后声明truncated
为一个值为的标志true
,然后声明一个 while 循环,一次打印 1,000 个项目,直到标志出现false
。
// Import required AWS SDK clients and commands for Node.js. import { ListObjectsCommand } from "@aws-sdk/client-s3"; import { s3Client } from "./libs/s3Client.js"; // Helper function that creates an Amazon S3 service client module. // Create the parameters for the bucket export const bucketParams = { Bucket: "BUCKET_NAME" }; export async function run() { // Declare truncated as a flag that the while loop is based on. let truncated = true; // Declare a variable to which the key of the last element is assigned to in the response. let pageMarker; // while loop that runs until 'response.truncated' is false. while (truncated) { try { const response = await s3Client.send(new ListObjectsCommand(bucketParams)); // return response; //For unit tests response.Contents.forEach((item) => { console.log(item.Key); }); // Log the key of every item in the response to standard output. truncated = response.IsTruncated; // If truncated is true, assign the key of the last element in the response to the pageMarker variable. if (truncated) { pageMarker = response.Contents.slice(-1)[0].Key; // Assign the pageMarker value to bucketParams so that the next iteration starts from the new pageMarker. bucketParams.Marker = pageMarker; } // At end of the list, response.truncated is false, and the function exits the while loop. } catch (err) { console.log("Error", err); truncated = false; } } } run();
要运行示例,请在命令提示符处输入以下内容。
node s3_list1000plusobjects.js
此示例代码可以在此处找到 GitHub
删除 Amazon S3 存储桶
创建一个libs
目录,然后使用该文件名创建 Node.js 模块s3Client.js
。将以下代码复制并粘贴到其中,这将创建 Amazon S3 客户端对象。将 RE G
ION 替换为您的Amazon区域。
// Create service client module using ES6 syntax. import { S3Client } from "@aws-sdk/client-s3"; // Set the AWS Region. const REGION = "us-east-1"; // Create an Amazon S3 service client object. const s3Client = new S3Client({ region: REGION }); export { s3Client };
此代码可在此处获得 GitHub
创建文件名为 s3_deletebucket.js
的 Node.js 模块。确保按照前面所示配置 SDK,包括安装所需的客户端和软件包。
添加一个变量来保存用于调用 Amazon S3 服务对象deleteBucket
方法的参数,包括要删除的存储桶的名称。存储桶必须为空才能将其删除。回调函数记录成功或失败消息。
// Import required AWS SDK clients and commands for Node.js. import { DeleteBucketCommand } from "@aws-sdk/client-s3"; import { s3Client } from "./libs/s3Client.js"; // Helper function that creates an Amazon S3 service client module. // Set the bucket parameters export const bucketParams = { Bucket: "BUCKET_NAME" }; export const run = async () => { try { const data = await s3Client.send(new DeleteBucketCommand(bucketParams)); return data; // For unit tests. console.log("Success - bucket deleted"); } catch (err) { console.log("Error", err); } }; // Invoke run() so these examples run out of the box. run();
要运行示例,请在命令提示符处输入以下内容。
node s3_deletebucket.js
此示例代码可以在此处找到 GitHub
创建预签名 URL
本部分演示了如何创建预签名 URL 以在 Amazon S3 存储桶中获取和放置对象。
创建预签名 URL 以将对象上传到 Amazon S3 存储桶
创建一个libs
目录,然后使用该文件名创建 Node.js 模块s3Client.js
。将以下代码复制并粘贴到其中,这将创建 Amazon S3 客户端对象。将 RE G
ION 替换为您的Amazon区域。
// Create service client module using ES6 syntax. import { S3Client } from "@aws-sdk/client-s3"; // Set the AWS Region. const REGION = "us-east-1"; // Create an Amazon S3 service client object. const s3Client = new S3Client({ region: REGION }); export { s3Client };
此代码可在此处获得 GitHub
创建文件名为 s3_presignedURL_v3.js
的 Node.js 模块。确保按照前面所示配置 SDK,包括安装所需的客户端和软件包。
创建一个函数,该函数创建要上传的存储桶和对象,创建用于上传对象的预签名 URL,然后上传对象。在此示例中,对象和存储分区会自动删除,以确保您不会产生任何不必要的开支。
使用调用 Amazon S3 服务对象PutObjectCommand
命令所需的参数创建变量。在本示例中,存储桶名称、文件名或密钥、正文和到期时间已预先填充。
有关创建预签名 URL 的更多信息,请参阅https://docs.amazonaws.cn/AmazonS3/latest/dev/PresignedUrlUploadObject.html。
// Import the required AWS SDK clients and commands for Node.js import { CreateBucketCommand, DeleteObjectCommand, PutObjectCommand, DeleteBucketCommand } from "@aws-sdk/client-s3"; import { s3Client } from "./libs/s3Client.js"; // Helper function that creates an Amazon S3 service client module. import { getSignedUrl } from "@aws-sdk/s3-request-presigner"; import fetch from "node-fetch"; // Set parameters // Create a random name for the Amazon Simple Storage Service (Amazon S3) bucket and key export const bucketParams = { Bucket: `test-bucket-${Math.ceil(Math.random() * 10 ** 10)}`, Key: `test-object-${Math.ceil(Math.random() * 10 ** 10)}`, Body: "BODY" }; export const run = async () => { try { // Create an S3 bucket. console.log(`Creating bucket ${bucketParams.Bucket}`); await s3Client.send(new CreateBucketCommand({ Bucket: bucketParams.Bucket })); console.log(`Waiting for "${bucketParams.Bucket}" bucket creation...`); } catch (err) { console.log("Error creating bucket", err); } try { // Create a command to put the object in the S3 bucket. const command = new PutObjectCommand(bucketParams); // Create the presigned URL. const signedUrl = await getSignedUrl(s3Client, command, { expiresIn: 3600, }); console.log( `\nPutting "${bucketParams.Key}" using signedUrl with body "${bucketParams.Body}" in v3` ); console.log(signedUrl); const response = await fetch(signedUrl, {method: 'PUT', body: bucketParams.Body}); console.log( `\nResponse returned by signed URL: ${await response.text()}\n` ); } catch (err) { console.log("Error creating presigned URL", err); } try { // Delete the object. console.log(`\nDeleting object "${bucketParams.Key}"} from bucket`); await s3Client.send( new DeleteObjectCommand({ Bucket: bucketParams.Bucket, Key: bucketParams.Key }) ); } catch (err) { console.log("Error deleting object", err); } try { // Delete the S3 bucket. console.log(`\nDeleting bucket ${bucketParams.Bucket}`); await s3Client.send( new DeleteBucketCommand({ Bucket: bucketParams.Bucket }) ); } catch (err) { console.log("Error deleting bucket", err); } }; run();
要运行示例,请在命令行中键入以下内容。
node s3_put_presignedURL_v3.js
此示例代码可以在此处找到 GitHub
创建预签名 URL 以从 Amazon S3 存储桶获取对象
创建一个libs
目录,然后使用该文件名创建 Node.js 模块s3Client.js
。将以下代码复制并粘贴到其中,这将创建 Amazon S3 客户端对象。将 RE G
ION 替换为您的Amazon区域。
// Create service client module using ES6 syntax. import { S3Client } from "@aws-sdk/client-s3"; // Set the AWS Region. const REGION = "us-east-1"; // Create an Amazon S3 service client object. const s3Client = new S3Client({ region: REGION }); export { s3Client };
此代码可在此处获得 GitHub
创建文件名为 s3_get_presignedURL_v3.js
的 Node.js 模块。确保按照前面所示配置 SDK,包括安装所需的客户端和软件包。
创建一个函数,该函数创建存储桶并上传和对象,然后创建预签名 URL 以从存储桶中获取对象。在此示例中,对象和存储分区会自动删除,以确保您不会产生任何不必要的开支。
使用调用 Amazon S3 服务对象GetObjectCommand
命令所需的参数创建变量。在本示例中,存储桶名称、文件名或密钥、正文和到期时间已预先填充。
有关创建预签名 URL 的更多信息,请参阅https://docs.amazonaws.cn/AmazonS3/latest/dev/PresignedUrlUploadObject.html。
// Import the required AWS SDK clients and commands for Node.js import { CreateBucketCommand, PutObjectCommand, GetObjectCommand, DeleteObjectCommand, DeleteBucketCommand } from "@aws-sdk/client-s3"; import { s3Client } from "./libs/s3Client.js"; // Helper function that creates an Amazon S3 service client module. import { getSignedUrl } from "@aws-sdk/s3-request-presigner"; const fetch = require("node-fetch"); // Set parameters // Create a random names for the S3 bucket and key. export const bucketParams = { Bucket: `test-bucket-${Math.ceil(Math.random() * 10 ** 10)}`, Key: `test-object-${Math.ceil(Math.random() * 10 ** 10)}`, Body: "BODY" }; export const run = async () => { // Create an S3 bucket. try { console.log(`Creating bucket ${bucketParams.Bucket}`); const data = await s3Client.send( new CreateBucketCommand({ Bucket: bucketParams.Bucket }) ); return data; // For unit tests. console.log(`Waiting for "${bucketParams.Bucket}" bucket creation...\n`); } catch (err) { console.log("Error creating bucket", err); } // Put the object in the S3 bucket. try { console.log(`Putting object "${bucketParams.Key}" in bucket`); const data = await s3Client.send( new PutObjectCommand({ Bucket: bucketParams.Bucket, Key: bucketParams.Key, Body: bucketParams.Body, }) ); return data; // For unit tests. } catch (err) { console.log("Error putting object", err); } // Create a presigned URL. try { // Create the command. const command = new GetObjectCommand(bucketParams); // Create the presigned URL. const signedUrl = await getSignedUrl(s3Client, command, { expiresIn: 3600, }); console.log( `\nGetting "${bucketParams.Key}" using signedUrl with body "${bucketParams.Body}" in v3` ); console.log(signedUrl); const response = await fetch(signedUrl); console.log( `\nResponse returned by signed URL: ${await response.text()}\n` ); } catch (err) { console.log("Error creating presigned URL", err); } // Delete the object. try { console.log(`\nDeleting object "${bucketParams.Key}"} from bucket`); const data = await s3Client.send( new DeleteObjectCommand({ Bucket: bucketParams.Bucket, Key: bucketParams.Key }) ); return data; // For unit tests. } catch (err) { console.log("Error deleting object", err); } // Delete the S3 bucket. try { console.log(`\nDeleting bucket ${bucketParams.Bucket}`); const data = await s3Client.send( new DeleteBucketCommand({ Bucket: bucketParams.Bucket, Key: bucketParams.Key }) ); return data; // For unit tests. } catch (err) { console.log("Error deleting object", err); } }; run();
要运行示例,请在命令行中键入以下内容。
node s3_get_presignedURL_v3.js
此示例代码可以在此处找到 GitHub