使用S3将JSON文件放入AWS存储桶

时间:2018-08-09 19:15:00

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

我正在当前的工作场所编写ROI计算器脚本。该计算器旨在显示某人使用我们的包裹等可以节省多少...

该表格要求该人员在提交时填写姓名/电子邮件/电话。该数据将解析为JSON格式,然后尝试将其放入Amazon AWS服务器。

我正在使用JavaScript SDK API生成预签名的URL,以在我的AJAX PUT请求中使用。我在请求中尝试了各种参数,但仍收到403错误,该错误是-“对预检请求的响应未通过访问控制检查:所请求的资源上没有'Access-Control-Allow-Origin'标头。Origin'因此不允许访问“ null”。响应的HTTP状态码为403。

当我查看响应时,它是这样的-

禁止访问 CORSResponse:未为此存储桶启用CORS。

如果我单击我console.log上的实际签名URL,我会得到这个-

SignatureDoesNotMatch

我们计算出的请求签名与您提供的签名不匹配。检查您的密钥和签名方法。

我已经与监视此存储桶的团队进行了核对,签名和密钥正确,并且在存储桶上启用了CORS。这让我发疯了!

我还应该补充一点,我也尝试过仅使用GET,并且存在相同的错误。

这是我的预签名URL和AJAX请求的代码-

var s3 = new AWS.S3 ({
    accessKeyId: 'xxxxxxxxxxxxxxxxx',
    secretAccessKey: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
});

    var uploadPreSignedUrl = s3.getSignedUrl('putObject', {
    Bucket: 'bucket name',
    Key: 'path stuff here' + username variable + '.JSON',
    ACL: 'authenticated-read',
    ContentType: 'application/json'
});

$.ajax({
        type: "PUT",
        url: uploadPreSignedUrl,
        headers: {
            "Content-Type": "application/json"
        },
        data: JSON.stringify(userInfo),
        success: function (msg) {
            console.log(msg);
        },
        error: function (request, status, error) {
            console.log(status);
        }
    });

1 个答案:

答案 0 :(得分:0)

我能够解决此问题...事实证明,需要在API网关上启用CORS的后端团队以及实际的存储桶本身。我的预签名URL正常工作,并且AJAX调用也正确。希望这能对以后的人有所帮助。