【问题标题】:Create S3 Bucket if None Exists如果不存在,则创建 S3 存储桶
【发布时间】:2018-08-28 06:49:39
【问题描述】:

我的 node.js 应用程序需要将文件上传到 S3。大多数情况下,它会将文件上传到现有存储桶。但有时,需要先创建存储桶。有没有办法检查存储桶是否已经存在,如果不存在,在开始上传之前创建它?到目前为止,这是我所得到的:

function uploadit () {
  'use strict';
  console.log('Preparing to upload the verse.')
  var s3 = new AWS.S3({apiVersion: '2006-03-01'});
  var uploadParams = {Bucket: 'DynamicBucketName', key: '/test.mp3', Body: myvalue, ACL: 'public-read'};
  var file = 'MyVerse.mp3';

  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 = book.replace(/ /g, "")+reference.replace(/ /g, "")+"_user"+userid+".mp3";

  // 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);
      linkit();
      addanother();
    }
  });

}

【问题讨论】:

标签: node.js amazon-s3


【解决方案1】:

waitFor 应该能够告诉您存储桶是否不存在。

var params = {
  Bucket: 'STRING_VALUE' /* required */
};
s3.waitFor('bucketNotExists', params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

如果存储桶不存在,则可以创建它。

希望对你有帮助。

【讨论】:

    【解决方案2】:

    您可以将 create_bucket 放在 python 中的 try catch 块中,也可以列出_buckets 并搜索匹配项。

    import boto3
    
    s3 = boto3.client('s3', region_name='us-east-1', 
                        # Set up AWS credentials 
                        aws_access_key_id=AWS_KEY_ID, 
                         aws_secret_access_key=AWS_SECRET)
    
    buckets = s3.list_buckets()
    buckets = [bucket['Name'] for bucket in response['Buckets'] if bucket['Name']==bucket_name]
    if len(buckets)==0:
       s3_client.create_bucket(Bucket=bucket_name)
    

    【讨论】:

      猜你喜欢
      • 2022-01-10
      • 2021-08-01
      • 2022-11-06
      • 1970-01-01
      • 2018-02-26
      • 1970-01-01
      • 2020-07-16
      • 2021-07-03
      • 2020-05-26
      相关资源
      最近更新 更多