我有一些非常简单的代码来生成S3 URL。 我从开发工具包返回的 URL 只有 S3 的基本路径。 它不包含任何其他内容。 为什么会这样?
var AWS = require('aws-sdk');
var s3 = new AWS.S3();
console.log(s3.getSignedUrl('getObject', {
Bucket: 'test',
Key: 'test'
}));
// Returns "https://s3.amazonaws.com/"
节点.js v0.12.0、AWS 开发工具包 2.1.15 或 2.1.17、Windows 7 64 位、
问题不在于代码。 事实证明,当您没有在您的环境中正确设置 AWS 凭证时,AWS 开发工具包不会抱怨。 修复 ~/.aws/credentials
中的凭据解决了该问题。
我遇到了同样的问题。
我插入了一个正确的访问令牌,但有些请求只收到基本路径,而有些请求收到普通 URL。
当我将getSignedUrl
修改为await getSignedUrlPromise
时,我能够获得正确的 URL。
我也有同样的问题。我通过更改以下内容获得了正确的输出
从AWS_Access_Key_Id = myaccesskey
到aws_access_key_id=myaccesskey
密钥也是如此。这意味着您不应该使用大写,并且在=
之前和之后没有空格
跟踪您的问题,无论您的存储桶是否存在具有正确的权限,和/或凭证在您的 ~/.aws/credentials 文件中是否正确,还是任何其他与 AWS 访问相关的问题。我只是根据文档使用了(头桶)操作。
参考: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getSignedUrlPromise-property
要以编程方式实现此目的,请执行以下操作:
/* This operation checks to see if a bucket exists. Put into aws.ts files*/
var params = {
Bucket: "acl1"
};
s3.headBucket(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
同时回调:
var params = {
Bucket: 'STRING_VALUE', /* required */
ExpectedBucketOwner: 'STRING_VALUE' /* the owner's aws account id */
};
s3.headBucket(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
这将引发如下异常:
例如 => 凭据错误:如果使用AWS_CONFIG_FILE,则配置中缺少凭据...