content-type:multipart/form-data

服务端代码

package main

import (
	"bytes"
	"fmt"
	"github.com/gin-gonic/gin"
	"io/ioutil"
)

func main() {
	router := gin.Default()

	router.POST("/test", func(c *gin.Context) {
		// 打印出 body
		data, _ := ioutil.ReadAll(c.Request.Body)
		fmt.Printf("req.body=%s\n, content-type=%v\n", data, c.ContentType())
		// 把字节流重新放回 body 中
		c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(data))
		// 获取参数
		userName := c.PostForm("user_name")
		age := c.PostForm("age")
		fmt.Printf("userName=%s, age=%s\n", userName, age)
		c.JSON(200, "success")
	})
	router.Run(":8080")
}

postman 发起请求

使用 表单传递参数

multipart/form-data
content-type:multipart/form-data
multipart/form-data
error on parse multipart form array: no multipart boundary param in Content-Type

by the way

1、c.Request.Body 是一个 io.CloseReader 类型,并不是字节数组类型或者字符串类型,所以如果想获取到真实 body 内容,还需要通过 ioutil.ReadAll() 来获取。

c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(data))
data, _ := ioutil.ReadAll(c.Request.Body)
fmt.Printf("req.body=%s\n, content-type=%v\n", data, c.ContentType())
// 把字节流重新放回 body 中
c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(data))

参考