Пропущенный ответ длины содержимого от Минио на ОТПРАВКУ по указанному URL

# #http #go #minio

Вопрос:

При попытке выполнить запрос PUT на предварительно подписанный URL-адрес Minio с использованием библиотеки golang HttpClient возвращается следующая ошибка:

 <Error><Code>MissingContentLength</Code><Message>You must provide the Content-Length HTTP header.</Message><Key>obj</Key><BucketName>bucket</BucketName><Resource>/bucket/obj</Resource><RequestId>REMOVED</RequestId><HostId>REMOVED</HostId></Error>
 

Я пытаюсь загрузить файл по URL-адресу, созданному путем выполнения следующих действий на подключенном миниклиенте:

 minioClient.PresignedPutObject(context.Background(), "bucket", "obj", time.Second*60)
 

Код, в котором есть ошибка, выглядит так:

 url := "http://pre-signed-url-to-bucket-obj"
fileName := "test.txt"

file, err := os.Open(fileName)
if err != nil {
    log.Fatal(err)
}
defer file.Close()

request, err := http.NewRequest(http.MethodPut, url, file)
if err != nil {
    log.Fatal("Error creating request:", err)
}

// Tried including and excluding explicit Content-Length add, doesn't change response

// fStat, err := file.Stat()
// if err != nil {
//   log.Fatal("Error getting file info:", err)
// }

// request.Header.Set("Content-Length", strconv.FormatInt(fStat.Size(), 10))

client := amp;http.Client{}
resp, err := client.Do(request)
if err != nil {
    log.Fatal("Error performing request:", err)
}
defer resp.Body.Close()

content, err := ioutil.ReadAll(resp.Body)
if err != nil {
    log.Fatal("Error reading response:", err)
}

log.Println(string(content))
 

Я проверил запрос, и из того, что я могу сказать, добавляется длина содержимого.

Вызов curl с указанной --upload-file опцией будет работать:

 curl -X PUT 'http://pre-signed-url-to-bucket-obj' --upload-file test.txt
 

Я могу проверить, правильно ли добавлена длина содержимого.

Я хотел бы избежать формы, так как она делает странные вещи с объектом на конце Минио.

Любая помощь будет очень признательна!

Комментарии:

1. ContentLength это поле в Request структуре.