最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

node.js - AWS S3 JavaScript SDK getSignedUrl returns base path only - Stack Overflow

programmeradmin4浏览0评论

I have some very simple code for generating an S3 URL. The URL I get back from the SDK only has the base path for S3. It doesn't contain anything else. Why is this happening?

var AWS = require('aws-sdk');

var s3 = new AWS.S3();

console.log(s3.getSignedUrl('getObject', {
  Bucket: 'test',
  Key: 'test'
}));

// Returns "/"

Node.js v0.12.0, AWS SDK 2.1.15 or 2.1.17, Windows 7 64-bit,

I have some very simple code for generating an S3 URL. The URL I get back from the SDK only has the base path for S3. It doesn't contain anything else. Why is this happening?

var AWS = require('aws-sdk');

var s3 = new AWS.S3();

console.log(s3.getSignedUrl('getObject', {
  Bucket: 'test',
  Key: 'test'
}));

// Returns "https://s3.amazonaws./"

Node.js v0.12.0, AWS SDK 2.1.15 or 2.1.17, Windows 7 64-bit,

Share Improve this question asked Mar 14, 2015 at 2:34 BradBrad 163k55 gold badges377 silver badges552 bronze badges
Add a ment  | 

4 Answers 4

Reset to default 6

The problem wasn't with code. It turns out that when you don't have your AWS credentials set up properly in your environment that the AWS SDK doesn't plain. Fixing the credentials in ~/.aws/credentials resolved the issue.

I had the same problem.

I inserted a correct access token, but some requests received only basepath, and some requests received normal URLs.

I was able to get the correct URL when I modified getSignedUrl to await getSignedUrlPromise.

I too had the same problem. I got the correct output by changing the below

from AWS_Access_Key_Id = myaccesskey to aws_access_key_id=myaccesskey

Similarly for Secret key. That means you should not use Upper case and no space before and after =

To trace your issue whether your bucket exists with right permissions, and/or credentials are correct in your ~/.aws/credentials file, or whatever other aws access related problems. I just used the (Headbucket) operation as per documentation.

Ref: https://docs.aws.amazon./AWSJavaScriptSDK/latest/AWS/S3.html#getSignedUrlPromise-property

to achieve this programmatically:

/* 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
});

Meanwhile the callback:

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
});

This will throw an exception like:

for example => CredentialsError: Missing credentials in config, if using AWS_CONFIG_FILE...

发布评论

评论列表(0)

  1. 暂无评论