Gin教程(8)—文件上传
单文件上传
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")
}
说明
- 主要是两个函数的使用:
- Context.FormFile() 获取文件对象
- Context.SaveUploadedFile() 将文件对象保存到本地
- 注意:需要重新指定文件名,用户上传的文件名不可信。
- 如果不想存储在本地,那么可以参考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
说明
- 也是两个函数的使用:
- Context.MultipartForm() 不同于单文件上传,这里获取文件对象的数组
- Context.SaveUploadedFile() 将文件对象保存到本地
- 其他和单文件上传相同
需要注意的地方
如果上传的文件比较大,那么需要注意设置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