AWS S3:我们计算的请求签名与您提供的签名不匹配

Mat*_*aNg 0 javascript amazon-s3 amazon-web-services

我正在尝试使用 AWS S3 SDK 上传图片。现在这之前有效,但由于某种原因它停止工作,我开始收到此错误:

在此处输入图片说明

现在,当我点击链接时,它给了我一个“NoSuchKey”错误:

在此处输入图片说明

我不太明白这一点,因为我的密钥实际上只是一个字符串。我也在尝试上传一些东西,所以显然密钥不存在 - 我正在尝试上传它!

function initiateBucket() {
        var albumBucketName = 'bucket_name';
        var bucketRegion = 'us-east-1';
        var IdentityPoolId = 'identity_pool_id';

        AWS.config.update({
            region: bucketRegion,
            credentials: new AWS.CognitoIdentityCredentials({
                IdentityPoolId: IdentityPoolId
            })
        });

        return new AWS.S3({
            apiVersion: '2006-03-01',
            params: {Bucket: albumBucketName}
        });

function upload(file, key, metaData) {
    var temp = 'test';
    var temp1 = "test";
    if(verifyMetaData(metaData)) {
        var s3 = vm.initiateBucket();
        console.log(s3);
        s3.upload({
            Key: temp,
            Body: temp1,
            ACL: 'public-read',
            Metadata: metaData
        }, function(err, data) {
            if (err) {
                console.log(err.message);
                return false;
            }
            else {
                console.log("Successfully Uploaded to S3");
                return true;
            }
        });
    }
    else {
        console.log("Invalid MetaData");
        console.log(metaData);
        return false;
    }
};
Run Code Online (Sandbox Code Playgroud)

同样奇怪的是,我遵循了两个教程,输入了我的凭据,并且对两者都有效。然后我逐字地将他们如何配置 AWS 配置对象复制粘贴到我的 initialBucket 函数中,我最终得到了同样的错误。

这是我遵循的教程之一(查看“配置 SDK”):

http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/s3-example-photo-album.html

另一个教程来自博客,我没有链接,但我上面的代码与文档中的本教程相同。我所做的只是将它移动到一个函数中(它被调用),而在教程中他们将它作为全局变量。

由于它在教程中起作用,因此它不可能是配置问题。我认为这与 403 错误和“NoSuchKey”错误有关。但同样,教程中的代码是相同的,我只是传递字符串,所以这也没有意义。

我注意到的另一件事是 403 错误的链接有点奇怪。它以“ https://mng-monet.s3.amazonaws.com/test ”开头

不是应该像这样 s3.amazonaws//key 吗?:“ https://s3.amazonaws.com/mng-moment/test/ ...”。我的存储桶中文件的 URL 以 s3.amazonaws 开头,而不是像 403 错误那样的我的 bucketName。

我不知道为什么这些不同,或者它们是否应该不同。我也不知道如何更改 URL,因为我认为我实际上从未告诉它要转到哪个 URL。

任何想法表示赞赏。

谢谢。

Mat*_*aNg 5

原来是元数据把一切搞砸了。我花了两天时间才发现元数据后面的额外空间会抛出这个错误。真的根本不是一个有用的错误信息。