1

我正在尝试使用基本教程来创建一个 S3 存储桶,如下所示

var AWS = require('aws-sdk');

AWS.config.loadFromPath('./myawsconfig.json');
AWS.config.update({region: 'eu-west-1'});

var s3 = new AWS.S3();
s3.client.createBucket({Bucket: 'pBucket'}, function() {
  var data = {Bucket: 'pBucket', Key: 'myKey', Body: 'Hello!'};
  s3.client.putObject(data, function(err, data) {
    if (err) {
      console.log("Error uploading data: ", err);
    } else {
      console.log("Successfully uploaded data to myBucket/myKey");
    }
  });
});

但我收到以下错误

node createbucket.js
Error uploading data:  { [NoSuchBucket: The specified bucket does not exist]
  message: 'The specified bucket does not exist',
  code: 'NoSuchBucket',
  name: 'NoSuchBucket',
  statusCode: 404,
  retryable: false }
4

4 回答 4

1

我遇到了这个问题,发现我的 api-user 没有创建存储桶的权限。

稍微更彻底的错误检查揭示了这一点......

s3.client.createBucket({Bucket: 'someBucket'}, function(err) {
    if (err) {
      console.log("Error creating bucket: ", err);
    } else {
      console.log("Successfully created bucket 'someBucket'");
    }
// ...
于 2013-12-09T20:38:33.027 回答
1

我刚遇到这个问题,显然 Node.js 教程代码无法编译。我有一个 var Object 没有 createBucket 方法。

这有效:

var AWS = require('aws-sdk');
AWS.config.loadFromPath('./credentials.json');
// Set your region for future requests.
AWS.config.update({region: 'us-east-1'});
// Create a bucket and put something in it.
var s3 = new AWS.S3();
s3.client.createBucket({Bucket: 'hackathon-test'}, function() {
  var data = {Bucket: 'hackathon-test', Key: 'myKey', Body: 'Hello!'};
  s3.client.putObject(data, function(err, data) {
    if (err) {
      console.log("Error uploading data: ", err);
    } else {
      console.log("Successfully uploaded data to myBucket/myKey");
    }
  });
});
于 2013-04-13T15:37:07.633 回答
0

根据 aws S3 存储桶名称限制。您的存储桶名称不应包含任何大写字母。所以'pBucket'是无效的。

http://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html

符合 DNS 的存储桶名称的规则是:

  • 存储桶名称的长度必须至少为 3 且不超过 63 个字符。
  • 存储桶名称必须是一系列一个或多个标签。相邻标签由单个句点 (.) 分隔。存储桶名称可以包含小写字母、数字和连字符。每个标签必须以小写字母或数字开头和结尾。
  • 存储桶名称不得格式化为 IP 地址(例如 192.168.5.4)。
  • 当使用带有 SSL 的虚拟托管式存储桶时,SSL 通配符证书仅匹配不包含句点的存储桶。要解决此问题,请使用 HTTP 或编写您自己的证书验证逻辑。
于 2015-09-20T16:17:13.140 回答
0

我错过了一些建议,有人可能会觉得有用

  • 如果您将该区域设置为 S3 对象的一部分,var s3 = new AWS.S3({region: 'us-west-1'});则调用将失败(根据我的经验)。

  • 因此,您可以通过以下任一方式设置区域

一个)AWS.config.update({ region: 'eu-west-1' });

b) 作为 createBucket 参数的一部分

s3.createBucket({ Bucket: bucketName, CreateBucketConfiguration: { LocationConstraint: "eu-west-1" } }, function () {

另外,请注意存储桶名称中的大写或下划线,因为这也花了我一个小时的时间(仅符合 DNS 标准)。

于 2017-05-31T07:58:23.340 回答