GoWeb开发:005.Gin上传文件

202 阅读1分钟

上传单文件

r.POST("/upload", func(c *gin.Context) {
	file, err := c.FormFile("file")
	if err != nil {
		log.Panicln(err)
	}
	log.Println("uploaded filename " + file.Filename)

	dest := "./uploads/" + file.Filename
	// 上传文件至指定的完整文件路径
	err = c.SaveUploadedFile(file, dest)
	if err != nil {
		c.JSON(500, gin.H{
			"msg": err.Error(),
		})
		return
	}

	msg := fmt.Sprintf("%s uploaded.", file.Filename)

	c.JSON(200, gin.H{
		"msg": msg,
	})
})

使用apipost提交:

image-20230215165832495.png

上传多文件

r.POST("/uploads", func(c *gin.Context) {
	form, err := c.MultipartForm()
	if err != nil {
		log.Panicln(err)
	}
	files := form.File["files"]

	// var successful, failed int = 0, 0
	successful, failed := 0, 0

	for _, file := range files {
		log.Println("uploaded filename " + file.Filename)

		dest := "./uploads/" + file.Filename

		if err := c.SaveUploadedFile(file, dest); err != nil {
			log.Println(err)
			failed++
		} else {
			successful++
		}
	}
	msg := fmt.Sprintf("%d files, %d successful, %d failed", len(files), successful, failed)

	c.JSON(200, gin.H{
		"msg": msg,
	})
})

使用apipost提交:

image-20230215165904050.png

静态文件服务

//静态文件服务
r.Static("/uploads", "./uploads")

访问上传的文件:

http://localhost:8080/uploads/tool.png
http://localhost:8080/uploads/beaury.jpeg
http://localhost:8080/uploads/abc.jpeg