5

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

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

3 に答える 3

7

私は実際にこの問題を解決しました。構成にはリージョンが必要です。バケットが「USStandard」だったので、リージョンを空白のままにして機能しました。config.json-{"accessKeyId": "secretKey"、 "secretAccessKey": "secretAccessKey"、 "region": ""}

s3管理コンソールに移動してファイルの1つを選択し、[比率]をクリックします->ファイルのリンクを確認します。コンソールウィンドウの米国標準 https://s3.amazonaws.com/yourbucket/ ホストyourbucket.s3.amazonaws.com/

us-west- 1https ://s3-us-west-1.amazonaws.com/yourbucket/コンソールウィンドウのホストyourbucket.s3-us-west-1.amazonaws.com/

于 2013-01-24T22:28:41.377 に答える
5

.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();
于 2013-01-24T16:22:38.343 に答える
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");
    }
});

または、構成ファイルでリージョンを設定することでこれを解決できます。リージョン名を正確に指定する必要があります。

于 2015-04-17T09:11:57.093 に答える