Minio在PUT到预设URL时的MissingContentLength响应



当尝试使用golang httpClient库对预签名的Minio URL执行PUT请求时,返回以下错误:

<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>

我正在尝试将文件上传到通过在已连接的minioClient上运行以下命令创建的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 := &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))

我已经检查了请求,从我能告诉内容长度正在添加。

指定了--upload-file选项的curl调用可以工作:

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

我可以验证Content-Length是否正确添加。

我想避免使用表单,因为它会对Minio端的对象做一些奇怪的事情。

任何帮助都非常感谢!

对explicit content-length执行如下操作:

request.ContentLength = fStat.Size()
我验证了上面的代码与这个修复 一起工作。

相关内容

  • 没有找到相关文章

最新更新