fix: SimApiStorage 直接请求补 x-amz-date 签名头,Content-Type 移到 HttpContent
- 直接请求(上传/桶检测/建桶)需带 x-amz-date 请求头并纳入签名(缺省会 400) - Content-Type 按 soulsoft_net_http 规则设在 ByteArrayContent.headers(不是 request.headers) - 已用 oss.anymemory.cn 实测:上传/预签名上传/预签名下载回读全部一致
This commit is contained in:
@@ -207,8 +207,8 @@ public class SimApiStorage {
|
||||
let dateStamp = amzDate[0..8]
|
||||
let payloadHash = toHexString(sha256Bytes(data))
|
||||
let canonicalUri = "/${_bucket}/${uriEncode(object, false)}"
|
||||
let canonicalHeaders = "host:${_host}\nx-amz-content-sha256:${payloadHash}\n"
|
||||
let signedHeaders = "host;x-amz-content-sha256"
|
||||
let canonicalHeaders = "host:${_host}\nx-amz-content-sha256:${payloadHash}\nx-amz-date:${amzDate}\n"
|
||||
let signedHeaders = "host;x-amz-content-sha256;x-amz-date"
|
||||
let canonicalRequest = "PUT\n${canonicalUri}\n\n${canonicalHeaders}\n${signedHeaders}\n${payloadHash}"
|
||||
let stringToSign = "AWS4-HMAC-SHA256\n${amzDate}\n${dateStamp}/${_region}/s3/aws4_request\n" +
|
||||
"${toHexString(sha256Bytes(canonicalRequest.toArray()))}"
|
||||
@@ -218,9 +218,11 @@ public class SimApiStorage {
|
||||
try {
|
||||
let request = HttpRequestMessage(NetHttpMethod.Put, "${_endpoint}${canonicalUri}")
|
||||
request.headers.add("x-amz-content-sha256", payloadHash)
|
||||
request.headers.add("x-amz-date", amzDate)
|
||||
request.headers.add("Authorization", authorization)
|
||||
request.headers.add("Content-Type", contentType)
|
||||
request.content = ByteArrayContent(data)
|
||||
let content = ByteArrayContent(data)
|
||||
content.headers.add("Content-Type", contentType)
|
||||
request.content = content
|
||||
let response = client.send(request)
|
||||
try {
|
||||
SimApiError.errorWhenFalse(response.isSuccessStatusCode, code: response.statusCode,
|
||||
@@ -240,8 +242,8 @@ public class SimApiStorage {
|
||||
let dateStamp = amzDate[0..8]
|
||||
let payloadHash = toHexString(sha256Bytes(Array<Byte>(0, repeat: 0)))
|
||||
let canonicalUri = "/${_bucket}"
|
||||
let canonicalHeaders = "host:${_host}\nx-amz-content-sha256:${payloadHash}\n"
|
||||
let signedHeaders = "host;x-amz-content-sha256"
|
||||
let canonicalHeaders = "host:${_host}\nx-amz-content-sha256:${payloadHash}\nx-amz-date:${amzDate}\n"
|
||||
let signedHeaders = "host;x-amz-content-sha256;x-amz-date"
|
||||
let canonicalRequest = "HEAD\n${canonicalUri}\n\n${canonicalHeaders}\n${signedHeaders}\n${payloadHash}"
|
||||
let stringToSign = "AWS4-HMAC-SHA256\n${amzDate}\n${dateStamp}/${_region}/s3/aws4_request\n" +
|
||||
"${toHexString(sha256Bytes(canonicalRequest.toArray()))}"
|
||||
@@ -251,6 +253,7 @@ public class SimApiStorage {
|
||||
try {
|
||||
let request = HttpRequestMessage(NetHttpMethod.Head, "${_endpoint}${canonicalUri}")
|
||||
request.headers.add("x-amz-content-sha256", payloadHash)
|
||||
request.headers.add("x-amz-date", amzDate)
|
||||
request.headers.add("Authorization", authorization)
|
||||
let response = client.send(request)
|
||||
try {
|
||||
@@ -270,8 +273,8 @@ public class SimApiStorage {
|
||||
let dateStamp = amzDate[0..8]
|
||||
let payloadHash = toHexString(sha256Bytes(Array<Byte>(0, repeat: 0)))
|
||||
let canonicalUri = "/${_bucket}"
|
||||
let canonicalHeaders = "host:${_host}\nx-amz-content-sha256:${payloadHash}\n"
|
||||
let signedHeaders = "host;x-amz-content-sha256"
|
||||
let canonicalHeaders = "host:${_host}\nx-amz-content-sha256:${payloadHash}\nx-amz-date:${amzDate}\n"
|
||||
let signedHeaders = "host;x-amz-content-sha256;x-amz-date"
|
||||
let canonicalRequest = "PUT\n${canonicalUri}\n\n${canonicalHeaders}\n${signedHeaders}\n${payloadHash}"
|
||||
let stringToSign = "AWS4-HMAC-SHA256\n${amzDate}\n${dateStamp}/${_region}/s3/aws4_request\n" +
|
||||
"${toHexString(sha256Bytes(canonicalRequest.toArray()))}"
|
||||
@@ -281,6 +284,7 @@ public class SimApiStorage {
|
||||
try {
|
||||
let request = HttpRequestMessage(NetHttpMethod.Put, "${_endpoint}${canonicalUri}")
|
||||
request.headers.add("x-amz-content-sha256", payloadHash)
|
||||
request.headers.add("x-amz-date", amzDate)
|
||||
request.headers.add("Authorization", authorization)
|
||||
request.content = ByteArrayContent(Array<Byte>(0, repeat: 0))
|
||||
let response = client.send(request)
|
||||
|
||||
Reference in New Issue
Block a user