【发布时间】:2018-11-23 08:47:46
【问题描述】:
如何使用 aws-sdk 测试 AWS S3 上是否存在存储桶?
这个问题是为了测试一个对象是否存在于一个桶中:How to determine if object exists AWS S3 Node.JS sdk
这个问题是针对 Python 的:How can I check that a AWS S3 bucket exists?
【问题讨论】:
标签: javascript aws-sdk
如何使用 aws-sdk 测试 AWS S3 上是否存在存储桶?
这个问题是为了测试一个对象是否存在于一个桶中:How to determine if object exists AWS S3 Node.JS sdk
这个问题是针对 Python 的:How can I check that a AWS S3 bucket exists?
【问题讨论】:
标签: javascript aws-sdk
您可以使用以下代码:
// import or require aws-sdk as AWS
// const AWS = require('aws-sdk');
const checkBucketExists = async bucket => {
const s3 = new AWS.S3();
const options = {
Bucket: bucket,
};
try {
await s3.headBucket(options).promise();
return true;
} catch (error) {
if (error.statusCode === 404) {
return false;
}
throw error;
}
};
重要的是要意识到如果存储桶不存在,错误statusCode 将是404。
【讨论】:
.promise() 链吗? aws 文档使用了一个与您不同的非常简单的示例。我可能没有看到你做的事情。 docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/…
.promise() 允许使用async / await
要测试存储桶是否存在,请检查 createBucket 回调方法中的 statusCode 属性。如果是409,那么之前已经创建过了。我希望这足够清楚吗?
const ID = ''//Your access key id
const SECRET = ''//Your AWS secret access key
const BUCKET_NAME = ''//Put your bucket name here
const s3 = new AWS.S3({
accessKeyId: ID,
secretAccessKey: SECRET
})
const params = {
Bucket: BUCKET_NAME,
CreateBucketConfiguration: {
// Set your region here
LocationConstraint: "eu-west-1"
}
}
s3.createBucket(params, function(err, data) {
if (err && err.statusCode == 409){
console.log("Bucket has been created already");
}else{
console.log('Bucket Created Successfully', data.Location)
}
})
【讨论】:
看起来在 this 从 aws-sdk v2 更改为 v3 之后,您无法使用 headBucket() 进行此操作。
对于使用 v3 的用户,您可以试一试:
const { S3Client, HeadBucketCommand } = require('@aws-sdk/client-s3');
const checkBucketExists = async (bucket) => {
const client = new S3Client();
const options = {
Bucket: bucket,
};
try {
await client.send(new HeadBucketCommand(options));
return true;
} catch (error) {
if (error.statusCode === 404) {
return false;
}
throw error;
}
【讨论】: