2017-09-29 100 views
-1

所有, 我试图用S3临时的Javascript SDK上传文件到S3,但说实话,我无法找出这方面的任何工作的样品,包括S3文件。如何使用S3临时证书上传文件中的Javascript

理想情况下,我应该能够做到这一点:

s3Client =新AWS.client(新TemporaryCredential(keyid的,ACCESSKEY,令牌));

但我查了资料,没有一个地方是提如何使用临时凭据来创建S3客户端。

公司已经具有API来获取临时凭据,所以我知道如何在JavaScript中做到这一点真的很感兴趣。

我不知道是否有JS equivelant解决以下Java代码:

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

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

感谢您的建议。

+0

什么叫临时证书是什么意思?你的意思是临时签名的上传网址? – bryan60

+0

见上面,我怎么能像在java中一样传递临时凭证? – user3006967

+0

你想在nodejs服务器或浏览器上执行此操作吗 – bryan60

回答

1

的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。如果你希望你的用户/客户是 能够上传的特定对象,以你的水桶

预签名URL是有用的,但你并不需要 他们有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); 
}); 
+0

我目前正在使用预先签名的url来推送。但是对于一个包含多部分上传的大文件,我必须不断调用预先签署的API来签署每个块,这对于服务器端API来说很重要,所以我想可能是使用临时凭证,我只需要获得临时凭证一次来自后端API,然后使用S3 API将文件推送到S3。你认为怎么样 – user3006967

+0

对于多部分场景,我同意你的看法,预先签名的url要复杂得多。 [Plupload](https://github.com/moxiecode/plupload/blob/master/examples/jquery/s3.php)可能会有帮助,但我没有测试。 – silverfox

0

这里是如何阅读,上传,列表,删除相册到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 
    }) 
}); 

如果你的公司已经有一种方式来获得临时凭证,更换上述凭证使用您的凭据对象,而其中的其余部分是相同的。

谢谢。

+0

你可以详细说明你的答案吗?我如何通过与java中相同的临时凭证? – user3006967

+0

标题和标签与javascript相关。没有看到任何地方的Java – Kannaiyan