登录
首页 >  Golang >  Go问答

Minio 对未提供 Content-Length 的 PUT 请求返回 MissingContentLength 响应

来源:stackoverflow

时间:2024-02-25 21:21:26 299浏览 收藏

最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《Minio 对未提供 Content-Length 的 PUT 请求返回 MissingContentLength 响应》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

问题内容

当尝试使用 golang httpclient 库对预签名 minio url 执行 put 请求时,会返回以下错误:

missingcontentlengthyou must provide the content-length http header.objbucket/bucket/objremovedremoved

我正在尝试将文件上传到通过在连接的 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

我能够验证内容长度是否正确添加。

我想避免使用表单,因为它会对 minio 端的 obj 造成奇怪的影响。

非常感谢任何帮助!


正确答案


明确地对显式内容长度执行此操作:

request.ContentLength = fStat.Size()

我验证了上述代码适用于此修复

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>