Gin框架-请求
大约 1 分钟
请求
查询参数
?key=xxx&name=xxx&name=yyy 查询参数并不是GET请求专属的
router.GET("", func(c *gin.Context) {
name := c.Query("name")
age := c.DefaultQuery("age", "25") // 不穿age参数的话默认是25
keyList := c.QueryArray("key")
fmt.Println(name,age,keyList)
})
浏览器输入: 127.0.0.1:8080/?name=lsx&age=22&key=1&key=2 输出为:
lsx 22 [1 2]
动态参数
router.GET("user/:id/:name", func(c *gin.Context) {
userID := c.Param("id")
userName := c.Param("name")
fmt.Println(userID, userName)
})
浏览器输入: 127.0.0.1:8080/user/123/lsx 输出 123 lsx
表单参数
r.POST("users", func(c *gin.Context) {
name := c.PostForm("name") // 当该字段不赋值时, 传没传都是空的, 看不出来
age, ok := c.GetPostForm("age") // 当该字段不赋值时, OK为false
fmt.Println(name)
fmt.Println(age, ok)
})
用Postman测试:
输出:
lsx
22 true
[GIN] 2024/11/03 - 21:27:50 | 200 | 0s | 127.0.0.1 | POST "/users"
文件上传
r.POST("users", func(c *gin.Context) {
fileHeader, err := c.FormFile("file")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(fileHeader.Filename) // 文件名
fmt.Println(fileHeader.Size) // 文件大小, 单位字节
file, _ := fileHeader.Open() // 打开文件
byteDate, _ := io.ReadAll(file) // 读取文件内容
err = os.WriteFile("xxx.jpg", byteDate, 0666) // 写文件
fmt.Println(err)
})
或者更简便:
r.POST("upload", func(c *gin.Context) {
fileHeader, err := c.FormFile("file")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(fileHeader.Filename) // 文件名
fmt.Println(fileHeader.Size) // 文件大小, 单位字节
err = c.SaveUploadedFile(fileHeader, "./upload/"+fileHeader.Filename)
fmt.Println(err)
})
用Postman测试:
多文件上传
r.POST("uploads", func(c *gin.Context) {
form, err := c.MultipartForm()
if err != nil {
fmt.Println("error:", err)
return
}
for _, headers := range form.File {
for _, header := range headers {
c.SaveUploadedFile(header, "./uploads/"+header.Filename)
}
}
})
用Postman测试:
Body阅后即焚问题
r.POST("", func(c *gin.Context) {
byteData, _ := io.ReadAll(c.Request.Body)
fmt.Println(string(byteData))
// 读完之后, body就没了, 报错 error on parse multipart form array: multipart: NextPart: EOF
// 可以这样解决
c.Request.Body = io.NopCloser(bytes.NewReader(byteData))
name := c.PostForm("name")
fmt.Println(name)
})