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

2.2 请求返回

image-20210427212847388

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

3. 2 请求返回

image-20210427214144469