相关疑难解决方法(0)

使用签名URL上传到Amazon S3可以使用curl但不能在javascript中使用

我正在尝试使用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也能正常工作.

javascript curl file-upload amazon-s3 amazon-web-services

5
推荐指数
1
解决办法
2337
查看次数