文件上传

1991/6/26 Gin框架

# 1.介绍

Gin框架中已经支持文件上传,包括单文件上传和多文件上传。

# 2. 单文件上传

Gin框架中可以通过FormFile("param")来接收上传的单个文件信息,具体使用参考下面代码:

# 2.1 代码示例

//--- main.go ---------------
package main
import (
 "github.com/gin-gonic/gin"
 "go-use/practise"
)
func main() {
 // 创建一个默认的路由引擎
 engine := gin.Default()
 // 注册路由
 practise.TestRecFile(engine)
 _ = engine.Run()
}
//---file_receive.go-------
// 接收单个文件
func TestRecFile(engine *gin.Engine) {
 // 设置内存限制为8M, 默认是32MiB
 engine.MaxMultipartMemory = 8 << 20
 engine.POST("/file", func(context *gin.Context) {
  file, err := context.FormFile("img")
  if err != nil {
   context.JSON(500, gin.H{"err": err})
   return
  }
  // 文件重命名
  dst := "./tmp/"+file.Filename
  fmt.Println(dst)
  // 保存图片
  err = context.SaveUploadedFile(file, dst)
  if err != nil {
   context.JSON(500, gin.H{"err": "文件保存失败: " + err.Error()})
   return
  }
  context.JSON(200, gin.H{
   "msg":  "success",
   "name": file.Filename,
   "size": file.Size,
  })
 })
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

# 2.2 请求返回

# 3. 多文件上传

Gin框架中可以通过MultipartForm()来接收上传的多个文件信息,具体使用参考下面代码:

# 3. 1 代码示例

//--- main.go ---------------
package main
import (
 "github.com/gin-gonic/gin"
 "go-use/practise"
)
func main() {
 // 创建一个默认的路由引擎
 engine := gin.Default()
 // 注册路由
 practise.TestRecFiles(engine)
 _ = engine.Run()
}
//---file_receive.go-------
// 接收多个文件
func TestRecFiles(engine *gin.Engine)  {
 // 设置内存限制为8M, 默认是32MiB
 engine.MaxMultipartMemory = 8 << 20
 engine.POST("/files", func(context *gin.Context) {
  // 接收图片
  form, _ := context.MultipartForm()
  files := form.File["imgList[]"]
  // 遍历保存
  for _, file := range files {
   _ = context.SaveUploadedFile(file, "./tmp/"+file.Filename)
  }
  context.String(200,"保存成功!")
 })
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

# 3. 2 请求返回