Gin教程(8)—文件上传

  1. 单文件上传
  2. 多文件上传
  3. 需要注意的地方

单文件上传

func HandleUpload(c *gin.Context) {
    fAvatar, err := c.FormFile("avatar")
    if err != nil {
        c.String(http.StatusBadRequest, err.Error())
        return
    }

    //todo: 检测文件大小
    //if fAvatar.Size > xxxx

    //获取存储路径
    name, err := localName(fAvatar.Header)
    if err != nil {
        c.String(http.StatusBadRequest, err.Error())
        return
    }
    //保存
    c.SaveUploadedFile(fAvatar, name)

    c.String(http.StatusOK, "upload avatar done")
}

说明

  1. 主要是两个函数的使用:
    • Context.FormFile() 获取文件对象
    • Context.SaveUploadedFile() 将文件对象保存到本地
  2. 注意:需要重新指定文件名,用户上传的文件名不可信。
  3. 如果不想存储在本地,那么可以参考Context.SaveUploadedFile() 函数,获取File interface{},重写存储方法。

多文件上传

func HandleMultiple(c *gin.Context){
    form, err := c.MultipartForm()
    if err != nil {
        c.String(http.StatusBadRequest, err.Error())
        return
    }
    pics := form.File["pics"]
    for _, pic := range pics {
        //todo: 检测文件大小
        //if fAvatar.Size > xxxx

        //获取存储路径
        name, err := localName(pic.Header)
        if err != nil {
            c.String(http.StatusBadRequest, err.Error())
            return
        }
        //保存
        c.SaveUploadedFile(pic, name)
    }
    c.String(http.StatusOK,"done")
}

postman示例:

curl示例:

curl -X POST \
  http://127.0.0.1:8080/multiple \
  -H 'content-type: multipart/form-data' \
  -F pics=@/Users/dino/Pictures/pics/_UjPlnYdSqU.jpg \
  -F pics=@/Users/dino/Pictures/pics/_WY9BUmtyug.jpg \
  -F pics=@/Users/dino/Pictures/pics/-3cTY-Q6k88.jpg

说明

  1. 也是两个函数的使用:
    • Context.MultipartForm() 不同于单文件上传,这里获取文件对象的数组
    • Context.SaveUploadedFile() 将文件对象保存到本地
  2. 其他和单文件上传相同

需要注意的地方

如果上传的文件比较大,那么需要注意设置router.MaxMultipartMemory的值,默认是32MB。这个值最好应该在gin实例启动时设置。

完整代码:https://github.com/IrvinYoung/gin-lessons/tree/master/lesson8


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 irvin.em@live.com。

文章标题:Gin教程(8)—文件上传

文章字数:404

本文作者:dino

发布时间:2019-11-29, 11:43:38

最后更新:2019-11-29, 13:06:54

原始链接:https://blog.walkbc.com/2019/11/29/gin-lesson-uploadFiles/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

QQ交流群:273078549

目录