Iva*_*nna 5 javascript curl file-upload amazon-s3 amazon-web-services
我正在尝试使用PUT请求将文件上传到Amazon S3.我使用boto生成我签名的网址.如果我做
curl --upload-file test.jpg $SIGNED_URL
Run Code Online (Sandbox Code Playgroud)
然后上传工作正常(所以签名的网址没有问题).我也用curl将引用设置为各种各样的东西,它仍然有效,所以我认为也没有CORS问题.我正在尝试使用javascript上传文件blob,如下所示:
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("PUT", $SIGNED_URL);
xmlhttp.setRequestHeader('Content-Type', blob.type);
xmlhttp.send(blob);
Run Code Online (Sandbox Code Playgroud)
这总是返回403 Forbidden错误.我发现很难在网上找到任何关于从javascript向S3提供数据的信息.我现在意识到POST表单数据更常见,但是有什么办法可以修改我正在做的工作吗?
编辑:我现在找到了错误的正文:
> <Error><Code>SignatureDoesNotMatch</Code> <Message>The request
> signature we calculated does not match the signature you provided.
> Check your key and signing method.</Message>
Run Code Online (Sandbox Code Playgroud)
所以签名似乎就是问题所在.同样,当我使用卷曲时(即使它在javascript中失败后),同样精确的URL也能正常工作.
问题是卷曲没发送的'Content-Header'.无论您是否明确添加,Chrome都会发送此标头.要获得可以使用此标头的已签名网址,您需要将标头= {'Content-Type':type}传递给boto中的generate_url.
归档时间: |
|
查看次数: |
2337 次 |
最近记录: |