【问题标题】:Node.js 303 Permanent Redirect when connecting to AWS-SDK连接到 AWS-SDK 时的 Node.js 303 永久重定向
【发布时间】:2013-04-13 19:33:09
【问题描述】:

下午好,

我正在尝试建立与我的 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,我会得到同样的错误。

我做错了什么?

提前非常感谢您!

【问题讨论】:

  • 哦,好吧,那我该如何让它工作 - 或者有什么问题?
  • 这里可能是显而易见的:跟随重定向。但是,您使用的 API 可能存在缺陷,它不遵循您的重定向。
  • 哇!修复!问题是我没有在我的 S3 控制台中创建任何存储桶!还是谢谢老哥!

标签: javascript node.js amazon-web-services amazon-s3 http-status-code-301


【解决方案1】:

我已经解决了这个问题:

您必须确保您已经创建了同名的存储桶;在这种情况下,存储桶的名称将是“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'
})

现在应该可以了!最好的祝福

【讨论】:

    【解决方案2】:

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

    演示代码的问题是 Bucket 名称应该小写 - 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");
            });
        }
    
     })
    

    【讨论】:

    • 存储桶名称在整个 S3 中必须是唯一的,而不仅仅是特定区域。
    【解决方案3】:

    在这个问题上卡了一段时间......

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

    给定:

    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){...})
    

    【讨论】:

      猜你喜欢
      • 2018-07-25
      • 2017-04-25
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      • 2013-08-14
      • 2016-02-11
      • 2017-12-20
      相关资源
      最近更新 更多