如何测试 AWS S3 上是不是存在存储桶
Posted
技术标签:
【中文标题】如何测试 AWS S3 上是不是存在存储桶【英文标题】:How do I test if a bucket exists on AWS S3如何测试 AWS S3 上是否存在存储桶 【发布时间】: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?
【问题讨论】:
【参考方案1】:您可以使用以下代码:
// 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
我在使用 aws-sdk 2.484.0 尝试此操作时收到 400 Bad 请求,前提是该存储桶之前已存在。使用我从未创建过的存储桶名称,代码可以工作【参考方案2】:
要测试存储桶是否存在,请检查 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)
)
【讨论】:
请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常质量更高,更有可能吸引投票。【参考方案3】:看起来在 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;
【讨论】:
以上是关于如何测试 AWS S3 上是不是存在存储桶的主要内容,如果未能解决你的问题,请参考以下文章
AWS S3 CLI - 如何使用存储桶上设置的所有当前策略获取 JSON?
SonataMediaBundle - S3 AWS:'配置的存储桶“我的存储桶”不存在
如何将 AWS S3 存储桶与远程非 AWS 服务器上的文件同步?
AWS S3 存储桶 CORS 策略错误:请求的资源上不存在“Access-Control-Allow-Origin”标头