2017-09-29 97 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