写点什么

Golang Gin 框架上传介绍(四)

作者:liuzhen007
  • 2021 年 11 月 21 日
  • 本文字数:1514 字

    阅读完需:约 5 分钟

Golang Gin 框架上传介绍(四)

目录

前言

正文

结尾

前言

利用 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 框架能够非常简单的支持单文件上传和多文件同时上传。


作者简介:大家好,我是 liuzhen007,是一位音视频技术爱好者,同时也是 CSDN 博客专家、华为云社区云享专家、签约作者,欢迎关注我分享更多音视频相关内容!

发布于: 2 小时前阅读数: 7
用户头像

liuzhen007

关注

敲代码,搞开发。 2021.05.01 加入

本人深耕音视频技术,走全栈路线,前后端通吃,兼顾各端与流媒体服务器。 博客主页地址:https://liuzhen.blog.csdn.net 微信公众号:玩转音视频 欢迎交流学习!

评论

发布
暂无评论
Golang Gin 框架上传介绍(四)