0

我一直在尝试执行 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,即 Length Required。我们已经添加了以字节数组长度为值的 Content-Length 标头。但问题仍然在重复。请帮助解决问题。

4

1 回答 1

1

x-amz-content-sha256: STREAMING-AWS4-HMAC-SHA256-PAYLOAD仅与基于非标准的块上传 API一起使用。这是一种自定义编码,允许您将数据块写入线路。这与Multipart Upload API不同,也与Transfer-Encoding: chunked(S3 不支持上传)不同。

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

对于标准PUT上传,x-amz-content-sha256必须设置为请求正文的十六进制编码的 SHA-256 散列,或字符串UNSIGNED-PAYLOAD。推荐使用前者,因为它提供了完整性检查。如果出于某种原因,您的数据在网络上以 TCP 无法检测到的方式损坏,S3 将自动拒绝损坏的上传并且不创建对象。

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

于 2018-03-06T23:37:31.110 回答