使用纯Java脚本(无SDK)对AWS S3进行REST调用

时间:2018-10-01 19:34:49

标签: javascript rest api amazon-s3 get

我正在尝试使用纯Javascript向AWS S3发出GET请求。这是因为很遗憾,我无法再将SDK用于所有请求。我一直在尝试遵循Amazon提供的文档,但是进展甚微。到目前为止,我只能生成我的签名密钥。如果有人可以发布一个纯Javascript示例,使它简单地调用以检索对象,甚至列出所有带有特定前缀的对象,我将不知所措。老实说,我完全失去了阅读其文档的机会。似乎它仅对非常熟悉拨打这些电话的人有用。 #1和#2 on this image here是我一直在努力的目标。我想我有点理解他们想要什么,但我不知道如何将其完全转换为实际要求。不幸的是,他们文档中的代码示例很少而且相差甚远-其中很多只是伪代码/整件事的一小部分

编辑:您好,甚至还有人阅读

edit2:这是一些我想弄清楚怎么做的不起作用的东西

if (ComboboxValue == "some text from the dropdown menu"){ String sql = 
INSERT INTO tbl_1}
else{ String sql =  INSERT INTO tbl_2}

edit3:这是我遇到的许多错误,大概是因为我不知道自己在做什么。

var signingKey = getSigningKey(dateStamp, secretKey, regionName, serviceName);


    var time = new Date();
    //fullURL is something like https://s3.amazon.aws.com/{bucketName}/{imageName}
    time = time.toISOString();
    time = time.replace(/:/g, '').replace(/-/g,'');
    time = time.substring(0,time.indexOf('.'))+"Z";

    var request = new XMLHttpRequest();
    var canonString = "GET\n"+
                        encodeURI(fullURL)+"\n"+
                        encodeURI("Key=asd.jpeg")+"\n"+
                        "host:s3.amazonaws.com\n"+
                        "x-amz-content-sha256:"+CryptoJS.SHA256("").toString()+"\n"+
                        "host;x-amz-content-sha256\n"+
                        CryptoJS.SHA256("").toString();


    var stringToSign = "AWS4-HMAC-SHA256\n"+
                        time+"\n"+
                        "20181002/us-east-1/s3/aws4_request\n"+
                        CryptoJS.SHA256(canonString).toString();


    var authString = CryptoJS.HmacSHA256(signingKey, stringToSign).toString();

    var queryString = "GET https://s3.amazonaws.com/?Action=GetObject&Version=2010-05-08 HTTP/1.1\n"+
                        "Authorization: AWS4-HMAC-SHA256 Credential="+accessKey+"/20181002/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-date, Signature="+authString+"\n"+
                        "host: s3.amazonaws.com\n"+
                        "x-amz-date: "+time+"\n";

    request.open("GET", "https://s3.amazonaws.com/?Action=GetObject&Version=2010-05-08", false);
    request.setRequestHeader("Authorization", "AWS4-HMAC-SHA256 Credential="+accessKey+"/20181002/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-date, Signature="+authString);
    request.setRequestHeader("host", "s3.amazonaws.com");
    request.setRequestHeader("x-amz-date", time);
    request.send();

1 个答案:

答案 0 :(得分:0)

您可能想将SDK与浏览器调试器结合使用,以确定SDK如何格式化请求。在Chrome调试器的“网络”标签中,您可以将请求复制为javascript抓取。这将显示您需要设置的所有标题。然后,您可以将其用作非SDK代码的基础。