2013-01-24 43 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, retryable:false} – rigaman

7

我其實解決了這個問題。在你的配置你必須有一個區域,因爲我的桶是「美國標準」,我留下了我的區域空白,它的工作。 config.json - { 「accessKeyId」: 「祕密密鑰」, 「secretAccessKey」: 「secretAccessKey」, 「區」: 「」}

去到S3管理控制檯中選擇了一個文件,然後點擊proporties - >看看文件鏈接。 美國標準 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

Mine是新加坡,所以設置「region」:「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"); 
    } 
}); 

或者,您也可以通過在配置文件中設置區域解決這個問題,你就必須要精確您所在地區的名字。