1. 单文件

首先,使用方法 c.FormFile 解析目标文件,参数为 文件字段的key(从前端获取)。然后,用 c.SaveUploadedFile(file, “des path”) 来将文件上传到指定的路径中。

  1. func main() {
  2. router := gin.Default()
  3. router.POST("/upload", func(c *gin.Context) {
  4. // 单文件
  5. file, _ := c.FormFile("file")
  6. log.Println(file.Filename)
  7. // 上传文件至指定目录
  8. c.SaveUploadedFile(file, "/")
  9. c.String(http.StatusOK, fmt.Sprintf("'%s' uploaded!", file.Filename))
  10. })
  11. router.Run(":8080")
  12. }
  1. APIpost 拟前端上传文件,使用 param 参数格式:<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/2643809/1619700447626-2f01092d-60da-4959-b343-1850c96f90b3.png#clientId=ub1d620b7-69a1-4&from=paste&height=412&id=uef63f5b9&margin=%5Bobject%20Object%5D&name=image.png&originHeight=412&originWidth=1192&originalType=binary&size=56299&status=done&style=none&taskId=u55caa97f-786e-4613-9df4-3dd0d028304&width=1192)

2. 多文件

原理一样,不过将多个 文件字段的 key 都设置为file (类似于数组),然后使用 c.MultipartForm() 和 form.File[“file”] 逐一上传

  1. func main() {
  2. router := gin.Default()
  3. // 处理multipart forms提交文件时默认的内存限制是32 MiB
  4. // 可以通过下面的方式修改
  5. // router.MaxMultipartMemory = 8 << 20 // 8 MiB
  6. router.POST("/upload", func(c *gin.Context) {
  7. // Multipart form
  8. form, _ := c.MultipartForm()
  9. files := form.File["file"]
  10. for _, file := range files {
  11. log.Println(file.Filename)
  12. // 上传文件到指定的目录
  13. c.SaveUploadedFile(file, "xxxx")
  14. }
  15. c.JSON(http.StatusOK, gin.H{
  16. "message": fmt.Sprintf("%d files uploaded!", len(files)),
  17. })
  18. })
  19. router.Run()
  20. }

测试结果
image.png