1. 单文件
首先,使用方法 c.FormFile 解析目标文件,参数为 文件字段的key(从前端获取)。然后,用 c.SaveUploadedFile(file, “des path”) 来将文件上传到指定的路径中。
func main() {
router := gin.Default()
router.POST("/upload", func(c *gin.Context) {
// 单文件
file, _ := c.FormFile("file")
log.Println(file.Filename)
// 上传文件至指定目录
c.SaveUploadedFile(file, "/")
c.String(http.StatusOK, fmt.Sprintf("'%s' uploaded!", file.Filename))
})
router.Run(":8080")
}
APIpost 拟前端上传文件,使用 param 参数格式:<br />
2. 多文件
原理一样,不过将多个 文件字段的 key 都设置为file (类似于数组),然后使用 c.MultipartForm() 和 form.File[“file”] 逐一上传
func main() {
router := gin.Default()
// 处理multipart forms提交文件时默认的内存限制是32 MiB
// 可以通过下面的方式修改
// router.MaxMultipartMemory = 8 << 20 // 8 MiB
router.POST("/upload", func(c *gin.Context) {
// Multipart form
form, _ := c.MultipartForm()
files := form.File["file"]
for _, file := range files {
log.Println(file.Filename)
// 上传文件到指定的目录
c.SaveUploadedFile(file, "xxxx")
}
c.JSON(http.StatusOK, gin.H{
"message": fmt.Sprintf("%d files uploaded!", len(files)),
})
})
router.Run()
}
测试结果