在一次开发中,通过中间件访问请求中的post参数,于是使用 ioutil.ReadAll 来读取body中的内容并做相应的验证,代码如下:

	var pj map[string]interface{}
	body := c.Request.Body
	data, _ := ioutil.ReadAll(body)

一开始一切都挺美好,但等到测试的时候发现接口中调用 BindJSON(项目使用的框架是 gin) 返回错误,错误信息如下:

bind multipart: NextPart: EOF

经过一番排查发现是因为ioutil.ReadAll() 方法会将,会在你读取之后,就没有了内容,既然知道了原因,解决方法也随之出现,只需要在获取之后,从新将 body 的内容写入,代码如下:

c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(data))

至此问题得到了解决

参考链接

Golang: Read from an io.ReadWriter without losing its content