AWS s3 上传 api 调用返回 411 状态

AWS s3 upload api call returning 411 status

我一直在尝试执行 AWS s3 rest api 调用以将文档上传到 s3 存储桶。文档是字节数组的形式。

PUT /Test.pdf HTTP/1.1
Host: mybucket.s3.amazonaws.com
Authorization: **********
Content-Type: application/pdf
Content-Length: 5039151
x-amz-content-sha256: STREAMING-AWS4-HMAC-SHA256-PAYLOAD
x-amz-date: 20180301T055442Z

当我们执行 api 调用时,它给出响应状态 411,即需要长度。我们已经添加了 Content-Length header 字节数组长度作为值。但问题仍然重复。请帮助解决问题。

x-amz-content-sha256: STREAMING-AWS4-HMAC-SHA256-PAYLOAD 仅与 non-standards-based chunk upload API. This is a custom encoding that allows you to write chunks of data to the wire. This is not the same thing as the Multipart Upload API 一起使用,与 Transfer-Encoding: chunked 不同(S3 不支持上传)。

不清楚为什么这会导致 411 Length Required,但该错误表明 S3 对上传格式不满意。

对于标准 PUT 上传,x-amz-content-sha256 必须设置为请求正文的 hex-encoded SHA-256 哈希,或字符串 UNSIGNED-PAYLOAD。建议使用前者,因为它提供完整性检查。如果出于任何原因您的数据在网络上以 TCP 无法检测到的方式损坏,S3 会自动拒绝损坏的上传并且不会创建对象。

另见 https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-auth-using-authorization-header.html