1.介绍

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

2. 单文件上传

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

2.1 代码示例

 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
//--- 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,
		})
	})
}

2.2 请求返回

image-20210427212847388

3. 多文件上传

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

3. 1 代码示例

 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
//--- 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,"保存成功!")
	})
}

3. 2 请求返回

image-20210427214144469