2013-01-24 20 views
5

aws-sdkとknoxを使ってみましたが、画像をアップロードしようとしている状態コード301があります。ステータスコード301とメッセージが表示されます。 'アクセスしようとしているバケットは、指定されたエンドポイントを使用してアドレス指定する必要があります。将来のすべてのリクエストをこのエンドポイントに送信してください。これはPHPで動作します。aws-sdkを使用してnodejsの画像をアップロードできません。

AWS.config.loadFromPath(__dirname + '/config/config.json'); 
fs.readFile(source, function (err, data) { 
var s3 = new AWS.S3(); 
    s3.client.createBucket({Bucket: 'mystuff'}, function() { 
     var d = { 
      Bucket: 'mystuff', 
      Key: 'img/test.jpg', 
      Body: data, 
      ACL: 'public-read' 
      }; 
     s3.client.putObject(d, function(err, res) { 
      if (err) { 
       console.log("Error uploading data: ", err); 
       callback(err); 
      } else { 
       console.log("Successfully uploaded data to myBucket/myKey"); 
       callback(res); 
      } 
     }); 
    }); 
}); 

答えて

4

あなたは.send()を試しましたか?

下記のコードでS3にアップロードできます。

http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/AWSRequest.html

var s3object = {Bucket: 'mystuff', Key: name, Body : data['data']}; 
    s3.client.putObject(s3object).done(function(resp){ 
     console.log("Successfully uploaded data"); 
    }).fail(function(resp){ 
     console.log(resp); 
    }).send(); 
+1

同じエラーが発生しました{code: 'PermanentRedirect'、 message: 'アクセスしようとしているバケットは指定されたエンドポイントを使用してアドレス指定する必要があります。 」、 statusCode:301、 再試行可能:false} – rigaman

7

私は実際にこの問題を解決しました。あなたの設定では、バケツが「US Standard」だったので、地域を空けておく必要がありました。 config.json - { "accessKeyId": "秘密鍵"、 "secretAccessKey": "secretAccessKey"、 "地域": ""}

は、管理コンソールは、あなたのファイルのいずれかを選択してproportiesをクリックS3に行きます - >ファイルのリンクを見てください。あなたのコンソールウィンドウで 米国標準 https://s3.amazonaws.com/yourbucket/ ホストコンソールウィンドウ内 yourbucket.s3.amazonaws.com/

米国西部-1 https://s3-us-west-1.amazonaws.com/yourbucket/ ホスト yourbucket.s3-US-西1.amazonaws。 com/

+0

地域を空白に設定すると、 – badunk

+0

私はシンガポールのように「地域」を設定しました:「ap-southeast-1」が解決しました。私のための問題。ありがとう:-) –

0

新しいSDKで同じ問題があり、エンドポイントオプションを明示的に設定して解決しました。

参考:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#constructor_details

スニペット:

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

var s3 = new AWS.S3({ endpoint :'https://s3-your-region-varies.amazonaws.com' }), 
    myBucket = 'your-bucket-name'; 

var params = {Bucket: myBucket, Key: 'myUpload', Body: "Test"}; 

s3.putObject(params, function(err, data) { 
    if (err) { 
     console.log(err) 
    } else { 
     console.log("Successfully uploaded data to "+myBucket+"/testKeyUpload"); 
    } 
}); 

また、あなたの設定ファイルに領域を設定することで、これを解決することができますし、あなたは自分の地域名を正確にする必要があります。

関連する問題