使用JavaScript中的临时凭证上传到AWS S3

时间:2017-01-19 14:27:09

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

我正在使用从AWS Cognito收到的临时凭证将文件上传到S3存储桶,我真的很沮丧。我可以访问access-token,但我在试图初始化AWS S3客户端时迷路了。现在我将access-tokenidToken存储在cookie中(虽然这会改变)。

当我到达我的上传页面时,我有一个文件输入和文件上传按钮,并希望上传按钮上的文件...但我无法弄清楚如何做到这一点,我感觉真的,真的,愚蠢的涉及文档无济于事。

到目前为止,这是我的代码:

(function(){
    var fileSource = $("#fileSource");
    fileSource.on("change", function(){
        var filePath = $(this).val().split("\\");
        $("#upload-file-info").html(filePath[filePath.length - 1]);
    });
    console.log("accessToken", accessToken);
    console.log("idToken", idToken);
    AWS.config.region = Region;
    var bucket = new AWS.S3({
        params: {
            Bucket: bucketName + "/" + idToken["cognito:username"]
        }
    });
    console.log(bucket);
    $("#uploadButton").on("click", function(){
        if(!window.FileReader){
            return alert("FileReader API is not supported by your browser.");
        }
        var input = fileSource[0];
        if(input.files && input.files[0]){
            file = input.files[0];
            fr = new FileReader();
            fr.onload = function () {
                var objKey = bucketName + "/" + idToken["cognito:username"] + '/' + file.name;
                var params = {
                    Key: objKey,
                    ContentType: file.type,
                    Body: file
                };
                console.log(params);
                bucket.putObject(params, function (err, data) {
                    if (err) {
                        console.log("arguments", arguments)
                    } else {
                        console.log("arguments", arguments)
                    }
                });
            };
            fr.readAsDataURL( file );
        } else {
            alert("File not selected or browser incompatible.")
        }
    });
})();

bucketName在另一个文件中定义,检索和解码cookie的方法也是如此。

如果有人能指出我正确的方向,我会感激,因为我知道我错过了什么!即使是指向某个人工作的回购的指针也会有所帮助。

(我喜欢这种无服务器的东西的想法,但这对我改变这样的范例感到很头疼)

1 个答案:

答案 0 :(得分:1)

找到我自己的大部分答案,同时仍然拖着the documentation拖延。基本上,Javascript SDK会将我需要的大部分内容放入本地存储中,因此不需要使用cookie(我只是在离开cookie并为自己使用本地存储,然后检查本地存储;-) )。虽然我还没有,但是我已经取得了一些进展,我可能不得不在以后再问一个问题。