Как настроить заголовок Content-MD5 в Minio SDK для загрузки в IBM Cloud Object Storage? - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь установить заголовок Content-MD5, когда использую Minio Golang SDK для загрузки файла на S3. Я могу успешно загрузить файлы в AWS без настройки Content-MD5, но загрузка в 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
I использует поле UserMetadata в minio.PutObjectOptions для установки 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
}

1 Ответ

0 голосов
/ 06 июля 2018

@ pacalj Если вы посмотрите документацию AWS для PutObject https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html. Content-MD5 не является обязательным полем. То есть, если он не установлен клиентом, сервер не должен выдавать ошибку, как вы уже видели в AWS S3. Что касается minio-go sdk, content-MD5 не может быть установлен через PutObjectOptions, как объяснено в https://docs.minio.io/docs/golang-client-api-reference#FPutObject

Minio-go устанавливает X-Amz-Content-Sha256 в случае соединения http и Content-Md5 в случае соединения https. API-интерфейсы Minio-go FPutObject и PutObject абстрагируют как multi-part put, так и single part put в эти API. В случае multi-part PUT для каждой части будет установлено значение X-Amz-Content-Sha256 или Content-Md5 в зависимости от типа подключения. Поскольку вызов является абстрагированным, пользователь не может установить Content-Md5.

Я полагаю, что IBM Cloud Object Storage имеет ошибку, поскольку она не должна выдавать ошибку, даже если Content-Md5 не установлен.

...