下午好,
我试图建立与我的aws产品api的连接,但是我不断收到301永久重定向错误,如下所示:
{ [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");
});
});
如果我尝试使用不同的区域,例如us-west-1,我会得到同样的错误。
我做错了什么?
非常感谢您提前!
答案 0 :(得分: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'
})
现在应该可以了!祝福
答案 1 :(得分:2)
我刚刚遇到过这个问题,我认为http://aws.amazon.com/sdkfornodejs/的示例不正确。
演示代码的问题是Bucket名称应为小写 - http://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html
如果演示实际上在s3.createBucket中的回调上输出了err参数,那么这将是显而易见的。
在您创建它们的区域中,存储桶名称也必须是唯一的。
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 :(得分: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){...})