go-gin实现文件上传

单个文件上传见代码

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"net/http"
)

func main()  {
	server := gin.Default()
	gin.SetMode(gin.DebugMode)
	fmt.Println("Gin Running in", gin.Mode())

	server.GET("/test", func(ctx *gin.Context) {
		ctx.JSON(http.StatusOK, gin.H{
			"code": 1,
			"msg": "success",
		})
	})
	// uploadFile
	saveUploadFile(server)

	_ = server.Run(":8080")
}

func saveUploadFile(srv *gin.Engine) {
	srv.MaxMultipartMemory = 8 << 20 // max = 8MB
	srv.POST("/file", func(ctx *gin.Context) {
		file, err := ctx.FormFile("file") // file as the form-data key
		if err != nil {
			ctx.JSON(500, gin.H{"err": err})
			return
		}

		// file rename
		dst := "./" + file.Filename
		fmt.Println("save the uploadfile to dst:", dst)
		// save image
		err = ctx.SaveUploadedFile(file, dst)
		if err != nil {
			ctx.JSON(500, gin.H{"err": "file saving failed: " + err.Error()})
			return
		}

		ctx.JSON(200, gin.H{
			"msg": "success",
			"name": file.Filename,
			"size": file.Size,
		})
	})
}

postman测试:

批量文件上传见代码

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"net/http"
)

func main()  {
	server := gin.Default()
	gin.SetMode(gin.DebugMode)
	fmt.Println("Gin Running in", gin.Mode())

	server.GET("/test", func(ctx *gin.Context) {
		ctx.JSON(http.StatusOK, gin.H{
			"code": 1,
			"msg": "success",
		})
	})
	// uploadFile
	saveUploadFileV2(server)

	_ = server.Run(":8080")
}

// upload multi files
func saveUploadFileV2(srv *gin.Engine) {
	srv.MaxMultipartMemory = 8 << 20 // max = 8MB
	srv.POST("/files", func(ctx *gin.Context) {
		form, _ := ctx.MultipartForm()
		files := form.File["files[]"] // file as the form-data key
		var uploadFiles string
		// receive files with traversal
		for _, file := range files {
			// file rename
			dst := "./" + file.Filename
			err := ctx.SaveUploadedFile(file, dst)
			fmt.Println("save the uploadfile to dst:", dst)
			if err != nil {
				ctx.JSON(500, gin.H{"err": "file saving failed: " + err.Error()})
				return
			}
			uploadFiles = uploadFiles + " " +file.Filename
		}

		ctx.JSON(200, gin.H{
			"msg": "success",
			"files": uploadFiles,
		})
	})
}

postman测试:

posted on 2022-10-31 14:53  进击的davis  阅读(342)  评论(0编辑  收藏  举报

导航