gin对于文件的接收以及返回
接收文件
func main() {
r := gin.Default()
r.POST("/testLoad", func(c *gin.Context) {
file, _ := c.FormFile("file")
c.SaveUploadedFile(file, "./tmp/"+file.Filename)
c.JSON(200, gin.H{
"msg": file,
})
})
r.Run()
}
接收文件的方法分析
FormFile方法用于获取表单信息中file格式的参数。并且返回一个文件流。
SaveUploadedFile方法提供两个参数。参数1为指定需要保存操作的文件,参数2为指定保存路径。
func (c *Context) SaveUploadedFile(file *multipart.FileHeader, dst string) error {
src, err := file.Open()
if err != nil {
return err
}
defer src.Close()
out, err := os.Create(dst)
if err != nil {
return err
}
defer out.Close()
_, err = io.Copy(out, src)
return err
}
函数首先打开目标文件的文件流,后再本地dst路径下创建一个文件流,然后运用io操作经行复制,最后关闭本地与目标文件流。
实验SaveUpLoaded方法
func main() {
r := gin.Default()
r.POST("/testLoad", func(c *gin.Context) {
file, _ := c.FormFile("file")
dst := "./tmp/" + file.Filename
src, _ := file.Open()
defer src.Close()
out, _ := os.Create(dst)
defer out.Close()
io.Copy(out, src)
c.JSON(200, gin.H{
"msg": file,
})
})
r.Run()
}
file.close 用于关闭已经打开的文件,停止读写功能,防止出现错误。
给前端返回文件
func main() {
r := gin.Default()
r.POST("/testLoad", func(c *gin.Context) {
c.File("./tmp/" + "报名照片.jpg")
})
r.Run()
}
其中File的方法构造为
func (c *Context) File(filepath string) {
http.ServeFile(c.Writer, c.Request, filepath)
}
当form表单中多个同名文件一起上传时,只会存储靠前的文件,例如:
多文件上传
func main() {
r := gin.Default()
r.POST("/testLoad", func(c *gin.Context) {
form, _ := c.MultipartForm()
files := form.File["file"]
for _, file := range files {
c.SaveUploadedFile(file, "./tmp/"+file.Filename)
}
})
r.Run()
}
MultipartForm是经过解析的多部分表格,包括文件上传返回一个Form结构体。
只下载了name为file的文件。
个人理解为在创建储存容器后,将form表单内信息储存在Form结构体中的map结构中,在调用时,map中的key为form表单上的name值。再遍历经行单文件操作。
原文地址:https://blog.csdn.net/logiee/article/details/126631464
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_17227.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。