无法使用aws-sdk在nodejs中上传图像

我试过使用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); } }); }); }); 

你试过.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(); 

我真的解决了这个问题。 在你的configuration你必须有一个区域,因为我的桶是“美国标准”,我离开了我的地区空白,它的工作。 config.json – {“accessKeyId”:“secretKey”,“secretAccessKey”:“secretAccessKey”,“region”:“”}

去s3pipe理控制台select你的文件之一,然后点击proporties – >看文件链接。 美国标准https://s3.amazonaws.com/yourbucket/主机在您的控制台窗口yourbucket.s3.amazonaws.com/

us-west-1 https://s3-us-west-1.amazonaws.com/yourbucket/主机在您的控制台窗口yourbucket.s3-us-west-1.amazonaws.com/

我有与新的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"); } }); 

另外,你可以通过在你的configuration文件中设置区域来解决这个问题,你只需要精确的区域名称即可。