连接到 AWS-SDK 时的 Node.js 303 永久重定向
Posted
技术标签:
【中文标题】连接到 AWS-SDK 时的 Node.js 303 永久重定向【英文标题】:Node.js 303 Permanent Redirect when connecting to AWS-SDK 【发布时间】:2013-04-13 19:33:09 【问题描述】:下午好,
我正在尝试建立与我的 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,我会得到同样的错误。
我做错了什么?
提前非常感谢您!
【问题讨论】:
哦,好吧,那我该如何让它工作 - 或者有什么问题? 这里可能是显而易见的:跟随重定向。但是,您使用的 API 可能存在缺陷,它不遵循您的重定向。 This answer is related. 哇!修复!问题是我没有在我的 S3 控制台中创建任何存储桶!还是谢谢老哥! 【参考方案1】:我已经解决了这个问题:
您必须确保您已经创建了同名的存储桶;在这种情况下,存储桶的名称将是“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'
)
现在应该可以了!最好的祝福
【讨论】:
【参考方案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");
);
)
【讨论】:
存储桶名称在整个 S3 中必须是唯一的,而不仅仅是特定区域。【参考方案3】:在这个问题上卡了一段时间......
在我的配置文件中设置区域名称或将其留空都解决了这个问题。我遇到了谈论解决方案的要点,这很简单:
给定:
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)...)
【讨论】:
以上是关于连接到 AWS-SDK 时的 Node.js 303 永久重定向的主要内容,如果未能解决你的问题,请参考以下文章
通过 node.js 连接到 mysql 时出现未知数据库错误
连接到 Heroku PostgreSQL 数据库时的身份验证错误
wbhook 通过 ngrok 连接到本地 node.js 服务器,服务触发 Webhooks 需要密码吗?
无法在 aws-sdk(node.js)中收到 503 错误(服务不可用)的响应