3

下午好,

我正在尝试建立与我的 aws 产品 api 的连接,但是我不断收到 301 永久重定向错误,如下所示:

{ [PermanentRedirect: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.]
  message: 'The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.',
  code: 'PermanentRedirect',
  name: 'PermanentRedirect',
  statusCode: 301,
  retryable: false }

我用来连接 API 的代码如下:

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

//Setting up the AWS API
aws.config.update({
    accessKeyId: 'KEY',
    secretAccessKey: 'SECRET',
    region: 'eu-west-1'
})

var s3 = new aws.S3();

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

如果我尝试使用不同的区域,比如 us-west-1,我会得到同样的错误。

我究竟做错了什么?

非常感谢您!

4

3 回答 3

5

我已经解决了这个问题:

你必须确保你已经创建了一个同名的存储桶;在这种情况下,存储桶的名称将是“myBucket”。

s3.createBucket({Bucket: 'myBucket'}, function() {
var params = {Bucket: 'myBucket', Key: 'myKey', Body: 'Hello!'}; 

创建存储桶后,转到属性并查看它正在使用的区域 - 将其添加到:

aws.config.update({
    accessKeyId: 'KEY',
    secretAccessKey: 'SECRET',
    region: 'eu-west-1'
})

现在它应该工作了!最好的祝愿

于 2013-04-20T21:50:21.170 回答
2

我刚刚遇到这个问题,我相信http://aws.amazon.com/sdkfornodejs/上的示例是不正确的。

演示代码的问题是存储桶名称应为小写 - http://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html

如果演示实际上在 s3.createBucket 的回调中输出 err 参数,这将立即显而易见。

此外,存储桶名称在您创建它们的区域中必须是唯一的。

s3.createBucket({Bucket: 'mylowercaseuniquelynamedtestbucket'}, function(err) {

    if(err){
        console.info(err);
    }else{
        var params = {Bucket: 'mylowercaseuniquelynamedtestbucket', Key: 'testKey', Body: 'Hello!'};
        s3.putObject(params, function(err, data) {
            if (err)
                console.log(err)
            else
                console.log("Successfully uploaded data to testBucket/testKey");
        });
    }

 })
于 2013-07-30T19:42:08.557 回答
2

被这个卡住了一段时间...

在我的配置文件中设置区域名称或将其留空都没有解决问题。我遇到了谈论解决方案的要点,这很简单:

鉴于:

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

在实例化 S3 对象之前,请执行以下操作:

AWS.config.update({"region": "us-west-2"}) //replacing your region there

然后我可以毫无问题地调用以下内容:

var storage = new AWS.S3();
var params = {
                Bucket: config.aws.s3_bucket,
                Key: name,
                ACL:'authenticated-read',
                Body: data
            }
storage.putObject(params, function(storage_err, data){...})
于 2014-06-24T23:24:52.233 回答