• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Golang Gin 框架上传四

武飞扬头像
liuzhen007
帮助1

目录

前言

正文

结尾

前言

利用 Gin 框架,我们可以非常简单的实现上传服务接口的开发,今天我们就来看看 Gin 在这方面都支持哪些能力,能够为我们减少多少任务量。

正文

当设计开发一个存储服务的时候,首先就要想到如何实现上传存储功能,Gin 框架能够非常简单的支持单文件上传和多文件同时上传,接下来通过实例分别介绍这两方面的内容。

单文件上传

首先,我们来看 Gin 框架如何实现单文件上传,一般上传文件格式会被定义成 multipart forms 类型,并且保存在 file 字段中。在服务器端处理上传数据时,可以通过 FormFile() 方法来解析 file 参数。具体编码请看下面的代码实例:

package main 

import "github.com/gin-gonic/gin"

func main() {
	router := gin.Default()
	// 为 multipart forms 类型设置一个较低的内存缓存 (默认是 32 MiB)
	router.MaxMultipartMemory = 8 << 20  // 8 MiB
	router.POST("/upload", func(c *gin.Context) {
		// 单文件
		file, _ := c.FormFile("file")
		log.Println(file.Filename)

		// 保存上传文件到目标目录
                dst := "/Users/lz/go/src/bag/bin/test/dst/dst.jpg"
		c.SaveUploadedFile(file, dst)

		c.String(http.StatusOK, fmt.Sprintf("'%s' uploaded!", file.Filename))
	})
	router.Run(":8080")
}

当我们在服务端使用 FormFile() 方法解析 file 字段时,返回的 file 对象是一个 multipart.FileHeader 指针类型,其中包含了源文件数据的地址,然后使用 SaveUploadedFile() 方法保存 file 对象,参数 dst 是目标文件地址。

代码非常简单,接下来让我测试一下服务是否好用,我们 curl 工具模拟上传行为,具体命令如下:

 curl -X POST http://localhost:8080/upload \
  -F "file=@/Users/lz/go/src/bag/bin/test/src/cover.jpg" \
  -H "Content-Type: multipart/form-data"

结果:在目标目录中找到了上传的 cover.jpg 文件,如下图所示:

学新通网

多文件上传

Gin 框架不仅可以非常简单的支持单文件上传,还可以支持多文件同时上传,上传文件格式也会被定义成 multipart forms 类型,并且保存在 upload[] 字段中。在服务器端处理上传数据时,可以通过 File() 方法来解析 upload[] 参数。具体编码请看下面的代码实例:

func main() {
	router := gin.Default()
	// 限定 multipart forms 内容占用大小
	router.MaxMultipartMemory = 8 << 20  // 8 MiB
	router.POST("/upload", func(c *gin.Context) {
		// 多个 form 类型文件
		form, _ := c.MultipartForm()
		files := form.File["upload[]"]

		for _, file := range files {
			log.Println(file.Filename)

			// 保存到指定文件
                         dst := "/Users/lz/go/src/bag/bin/test/dst/"   file.Filename
			c.SaveUploadedFile(file, dst)
		}
		c.String(http.StatusOK, fmt.Sprintf("%d files uploaded!", len(files)))
	})
	router.Run(":8080")
}

原理上类似,只是在服务器端对同时上传到多个文件分别进行了保存而已。

下面让我们同时上传两个文件测试一下服务是否好用,具体命令如下:

curl -X POST http://localhost:8080/upload \
  -F "upload[]=@/Users/lz/go/src/bag/bin/test/src/cover.jpg" \
  -F "upload[]=@/Users/lz/go/src/bag/bin/test/src/cover2.jpg" \
  -H "Content-Type: multipart/form-data"

结果也是正确的。

结尾

通过文本的介绍,我们可以了解到 Gin 框架能够非常简单的支持单文件上传和多文件同时上传。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhbebjci
系列文章
更多 icon
同类精品
更多 icon
继续加载