Gin框架学习——文件的上传

287 阅读1分钟

今天学习了一下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函数将其内容进行覆盖

看一下效果:

image.png 可以看到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中的内容

image.png

本文正在参加技术专题18期-聊聊Go语言框架