我目前正在遵循此AWS tutorial来尝试让我的Web应用程序上的客户端上传到我的S3存储桶中。我有本教程中所述的POST政策(已删除一些详细信息):
{ "expiration": "2019-12-30T12:00:00.000Z",
"conditions": [
{"bucket": "<MY BUCKET NAME>"},
["starts-with", "$key", "images/"],
{"acl": "public-read"},
["starts-with", "$Content-Type", "image/"],
{"x-amz-algorithm": "AWS4-HMAC-SHA256"},
{"x-amz-credential": "<AWSAccessKeyId>/20190101/eu-west-2/s3/aws4_request"},
{"x-amz-date": "20190101T000000Z" }
]
}
我有一个指定的HTML表单:
<form action="http://<bucket-name>.s3.amazonaws.com/" method="post" enctype="multipart/form-data">
Key to upload:
<input type="input" name="key" value="images/${filename}" /><br />
<input type="hidden" name="acl" value="public-read" />
Content-Type:
<input type="input" name="Content-Type" value="image/jpeg" /><br />
<input type="text" name="X-Amz-Credential" value="<AWSAccessKeyId>/20190101/eu-west-2/s3/aws4_request" />
<input type="text" name="X-Amz-Algorithm" value="AWS4-HMAC-SHA256" />
<input type="text" name="X-Amz-Date" value="20190101T000000Z" />
Tags for File:
<input type="input" name="x-amz-meta-tag" value="" /><br />
<input type="hidden" name="Policy" value='<MY BASE 64 policy>' />
<input type="hidden" name="X-Amz-Signature" value="<SIGNATURE-VALUE>" />
<!-- File: -->
<input type="file" name="file" /> <br />
<!-- The elements after this will be ignored -->
<input type="submit" name="submit" value="Upload to Amazon S3" />
</form>
关于我的签名制作代码,我使用了他们的python示例,当我用他们的字符串对其进行测试时,对64个示例进行了签名并得到了正确的结果。所以我不认为我的问题在那里,但是我也可以随时上传我的python代码。
但是,当我尝试提交此表单并上传图像时,在生成的XML页面上出现SignatureDoesNotMatch
错误。
我应该在我的存储桶权限上上传POST策略吗?我不确定AWS如何计算签名,因为我认为我没有给它我的政策。我是在犯一个简单的错误吗?