今天学习了一下Gin框架中文件的上传,话不多说先上代码
如下为一个小列子
func main() {
r := gin.Default() //携带基础中间件的形式启动
r.POST("/testUpload", func(c *gin.Context) {
file, _ := c.FormFile("file")
c.SaveUploadedFile(file,"./" + file.Filename) //此处文件名最好使用统一格式
c.JSON(200,gin.H{
"data" : file,
})
})
r.Run(":8080") // listen and serve on 0.0.0.0:8080
}
tips:此处使用了gin自带的SaveUploadedFile函数进行文件的本地保存,内存封装源码如下:
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
}
可以看出,其实源码内容十分简单就是打开传来的file文件,然后根据路径在本地创建一个文件,再使用os包中的copy函数将其内容进行覆盖
看一下效果:
可以看到file里包含了三个内容:Filename,Header和Size
接下来,我们将此文件内容原封不动返回给前端进行展示
func main() {
r := gin.Default() //携带基础中间件的形式启动
r.POST("/testUpload", func(c *gin.Context) {
file, _ := c.FormFile("file")
c.SaveUploadedFile(file,"./" + file.Filename) //此处文件名最好使用统一格式
c.Writer.Header().Add("Content-Disposition",
fmt.Sprintf("attachment; filename=%s",file.Filename)) //在response中加入一个Header
c.File("./" + file.Filename) //返回
})
r.Run(":8080") // listen and serve on 0.0.0.0:8080
}
效果如下
文件:公式总结.md中的内容
本文正在参加技术专题18期-聊聊Go语言框架