3

Добрый день,Fixed - Node.js 303 Permanent Redirect при подключении к AWS-SDK

Я пытаюсь установить соединение с моим апи AWS продукта, но я постоянно получаю ошибку 301 Permanent Redirect следующим образом :

{ [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"); 
    }); 
}); 

Если я попробовать использовать различные регионы, как мы-запад-1 я просто получаю ту же ошибку.

Что я делаю неправильно?

спасибо, что заблаговременно!

+0

О, ладно, как я могу заставить его работать тогда - или что не так? – axsauze

+0

Можете указать на очевидное здесь: следовать за перенаправлением. Однако это может быть недостатком используемого вами API, который не соответствует перенаправлениям для вас. –

+0

[Этот ответ связан] (http://stackoverflow.com/a/14511996/175849). –

ответ

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' 
}) 

Теперь он должен работать! С наилучшими пожеланиями

2

Я только что столкнулся с этой проблемой, и я считаю, что пример в http://aws.amazon.com/sdkfornodejs/ неверен.

Проблема с демо-кода является то, что имена ковшей должны быть в нижнем регистре - http://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html

Если бы демо на самом деле выводить заблуждается аргумент на обратный вызов в s3.createBucket это было бы сразу видно.

Также имена ковша должны быть уникальными в регионе, где вы их создаете.

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"); 
     }); 
    } 

}) 
+2

Названия ковша должны быть уникальными для всех S3, а не только для определенного региона. –

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){...}) 
Смежные вопросы