登录
首页 >  Golang >  Go问答

使用 Go Gin 解析请求体中的文件数据

来源:stackoverflow

时间:2024-02-10 13:21:23 272浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《使用 Go Gin 解析请求体中的文件数据》,主要介绍了,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

当我尝试使用 go gin 读取 http 请求的请求正文时,我收到空文件。根据我的请求,我将发送一个附加到请求正文的文件(内容类型:application/octet-stream)。

request headers
authorization: bearer xxx
user-agent: postmanruntime/7.29.0
accept: */*
postman-token: xxx
host: localhost:8080
accept-encoding: gzip, deflate, br
connection: keep-alive
content-length: 12
content-type: application/octet-stream
request body
src: "path to my file"

后端go代码:

bodySize, _ = strconv.ParseInt(c.Request.Header.Get("Content-Length"), 10, 64)
buf := bytes.NewBuffer(make([]byte, 0, bodySize))
_, err = io.Copy(buf, c.Request.Body)
fmt.Println(buf.String())

打印语句打印空字符串,但文件不为空(内容长度为12)。


正确答案


@novalagung 是的,我在 main 函数之前在中间件中读取它,在中间件之后继续执行 c.next() 。在中间件中,读取工作正常。 –

在您阅读其内容后,http.request.body 将为空。读取请求体后,您需要将其存储在某个地方,这样您就不需要读取两次。

或者,还有另一种替代解决方法,您可以在阅读后将内容放回 req.body 中。

// middleware do read the body
bodyBytes, _ := ioutil.ReadAll(req.Body)
req.Body.Close()  //  must close

// put back the bodyBytes to req.Body
req.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))

但我不推荐它!

理论要掌握,实操不能落!以上关于《使用 Go Gin 解析请求体中的文件数据》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

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