如何使用 S3 临时凭证在 Javascript 中上传文件

use*_*967 2 javascript amazon-s3 amazon-web-services 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();
Run Code Online (Sandbox Code Playgroud)

谢谢你的建议。

sil*_*fox 5

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);
});
Run Code Online (Sandbox Code Playgroud)

但我建议使用预签名 URL上传文件而不是 STS TemporaryCredential。

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

-- AWS 文档

客户端(浏览器)不需要加载繁重的 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);
});
Run Code Online (Sandbox Code Playgroud)