如何使用S3临时凭证在Javascript

时间:2017-09-29 22:00:49

标签: javascript amazon-web-services amazon-s3 aws-sdk

全部, 我尝试使用S3临时Javascript SDK将文件上传到S3,但说实话,我找不到任何可用的样本,包括S3文档。

理想情况下,我应该可以这样做:

s3Client = new AWS.client(new TemporaryCredential(keyId,accesskey,token));

但是我检查了文档,没有提到如何使用临时凭证来创建S3客户端。

我们公司已经拥有获取临时凭证的API,所以我真的很想知道如何在javascript中执行此操作。

我不知道下面的java代码是否有js equivelant解决方案:

BasicSessionCredentials sessionCredentials = new BasicSessionCredentials(
   session_creds.getAccessKeyId(),
   session_creds.getSecretAccessKey(),
   session_creds.getSessionToken());

AmazonS3 s3 = AmazonS3ClientBuilder.standard()
                        .withCredentials(new AWSStaticCredentialsProvider(sessionCredentials)
                        .build();

感谢您的建议。

2 个答案:

答案 0 :(得分:4)

TemporaryCredential只是常规凭证,您可以像平常一样使用它。

AWS.config.update({
    region: "us-east-1",
    credentials: new AWS.Credentials('AccessKeyId', 'SecretAccessKey', 'SessionToken')
});

var s3 = new AWS.S3();
var params = {
    Body: "The quick brown fox jumps over the lazy dog",
    Bucket: "example-bucket",
    Key: "hello.txt"
};
s3.putObject(params, function (err, data) {
    if (err) console.log(err, err.stack);
    else console.log(data);
});

但我建议使用Pre-Signed URL上传文件而不是STS TemporaryCredential。

  

如果您希望自己的用户/客户,预签名网址非常有用   能够将特定对象上传到您的存储桶,但您不需要   他们拥有AWS安全凭证或权限。

     

- AWS Documentation

客户端(浏览器)无需加载繁重的AWS SDK,简单的HTTP PUT请求就是全部。

var url = 'https://example-bucket.s3.amazonaws.com/hello.txt?blablabla'
var request = new Request(url, {
    method: 'PUT',
    body: "The quick brown fox jumps over the lazy dog",
});
fetch(request).then(function (response) {
    console.log(response);
}).catch(function (err) {
    console.log(err, err.stack);
});

答案 1 :(得分:1)

以下是有关如何阅读,上传,列出,删除相册到S3的完整示例。

http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/s3-example-photo-album.html

AWS.config.update({
  region: bucketRegion,
  credentials: new AWS.CognitoIdentityCredentials({
    IdentityPoolId: IdentityPoolId
  })
});

如果您的公司已经有办法获取临时凭证,请将上述凭证对象替换为您的凭据,其余部分也是相同的。

感谢。