我正在尝试使用libcurl进行分段上传到s3。我的启动多部分请求看起来像这样
POST /my_new_file.mbi?uploads HTTP / 1.1接受: / 主持人: test_bucket.s3.amazonaws.com日期:星期四,2014年5月1日13:35:17 GMT 授权:AWS4-HMAC-SHA256 凭证= XXXXXXX / 20140501 / US-东-1 / S3 / aws4_request,SignedHeaders =宿主,签名= 1a3fd6195040494dd95507455a3b1eefef40346485e3fdafbe6cc136192365a2
我得到以下回复
提供的' x-amz-content-sha256'标头必须是有效的SHA256。
s3文档说我们不需要任何其他标题用于Initiate多部分上传调用(POST)。尝试了各种签名空内容的组合,但没有运气。
我在这里缺少什么?这里的任何建议都会非常有用。
由于
答案 0 :(得分:3)
我还没有使用版本4 auth,但是,对于分段上传(我的代码使用v2),但我确实找到了这个:
的x AMZ-内容-SHA256
使用签名版本4对请求进行身份验证时,此标头提供请求有效内容的哈希值。有关更多信息,请参阅Authenticating Requests by Using the Authorization Header (Compute Checksum of the Entire Payload Prior to Transmission) - Signature Version 4。以块的形式上传对象时,将值设置为
STREAMING-AWS4-HMAC-SHA256-PAYLOAD
以指示签名仅涵盖标题并且没有有效负载。有关详细信息,请参阅Authenticating Requests Using HTTP Authorization Header (Chunked Upload)。
http://docs.aws.amazon.com/AmazonS3/latest/API/RESTCommonRequestHeaders.html
显然,chunked和multipart不是同一个东西,但也许这个值也适用于分段上传请求,或者会生成一个新的更有用的错误消息。遗憾的是,在这种情况下,文档似乎很少。
答案 1 :(得分:2)
对于收到此错误的Google员工:
Missing required header for this request: x-amz-content-sha256
使用awscli时,对我有用的是将文件〜/ .aws / config (我正在使用Ubuntu)中的正确设置为我们 - 东 - 1 即可。 US 只是不起作用,也不适用美国标准。返回的错误并不能真正表明。
答案 2 :(得分:1)
STREAMING-AWS4-HMAC-SHA256-PAYLOAD
似乎不再有效。我能够通过传递空字符串e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855