gpt4 book ai didi

go - 如何在 Minio SDK 中设置 Content-MD5 header 以上传到 IBM Cloud Object Storage?

转载 作者:数据小太阳 更新时间:2023-10-29 03:22:33 34 4
gpt4 key购买 nike

当我使用 Minio Golang SDK 将文件上传到 S3 时,我试图设置 Content-MD5 header 。我可以在不设置 Content-MD5 的情况下成功将文件上传到 AWS,但上传到 IBM Cloud Object Storage 失败并出现以下错误:

ERR: Object write failed, reason: Missing required header for this request: Content-MD5

根据Minio SDK,
https://docs.minio.io/docs/golang-client-api-reference#FPutObject
我使用 minio.PutObjectOptions 中的 UserMetadata 字段来设置 Content-MD5,但是 IBM Cloud Object Storage 一直提示缺少 MD5,我在以下代码中做错了吗?

func (cloudIO *CloudIO) FWrite(name string) (n int, err error) {
f, err := os.Open(name)
if err != nil {
log.Fatal(err)
}
defer f.Close()

h := md5.New()
if _, err := io.Copy(h, f); err != nil {
log.Fatal(err)
}

bytesWritten, err := cloudIO.client.FPutObject(cloudIO.bucket, cloudIO.address,
name,
minio.PutObjectOptions{UserMetadata: map[string]string{"Content-MD5": hex.EncodeToString(h.Sum(nil))}})
return int(bytesWritten), err
}

最佳答案

@pacalj 如果您查看 PutObject https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html 的 AWS 文档. Content-MD5 不是必填字段。这意味着如果它不是由客户端设置的,服务器就不会出错,正如您已经在 AWS S3 中看到的那样。就 minio-go sdk 而言,content-MD5 不能通过 PutObjectOptions 设置,如 https://docs.minio.io/docs/golang-client-api-reference#FPutObject 中所述。

Minio-go 在 http 连接的情况下设置 X-Amz-Content-Sha256 ,在 Content-Md5 的情况下 https 连接。 Minio-go 的FPutObjectPutObject api 将multi-part putsingle part put 抽象到这些API 中。在 multi-part PUT 的情况下,每个部分将根据类型设置 X-Amz-Content-Sha256Content-Md5的连接。由于调用是抽象的,因此用户无法设置 Content-Md5

我相信 IBM Cloud Object Storage 有一个错误,即使未设置 Content-Md5 也不会出错。

关于go - 如何在 Minio SDK 中设置 Content-MD5 header 以上传到 IBM Cloud Object Storage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51160321/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com