gin框架学习-文件上传

简介: 多文件上传就是一次可以上传多个文件,不需要一个文件一个文件上传,这也便于上传文件的人。

前言


感谢开源项目gin-vue-admin,以及1010工作室的视频教程

本人学识尚浅,如有错误,请评论指出,谢谢!

详细可见个人博客:https://linzyblog.netlify.app/

一、单文件上传


  • multipart/form-data格式用于文件上传,gin文件上传与原生的net/http方法类似,不同在于gin把原生的request封装到c.Request中。


func main() {
  r := gin.Default()
  r.POST("/FileTest", func(c *gin.Context) {
    //FormFile返回所提供的表单键的第一个文件
    f, _ := c.FormFile("file")
    //SaveUploadedFile上传表单文件到指定的路径
    c.SaveUploadedFile(f, "./"+f.Filename)
    c.JSON(200, gin.H{
      "msg": f,
    })
  })
  r.Run(":8080")
}


打开postman选择POST请求,选择Body里的form-data上传文件,访问http://localhost:8080/FileTest


3359817211114ae5bcae15c3ac2e22bd.png


我们可以看到请求返回的文件包含了文件名和他的头映射。


957ab44c7e9240d6bb13bbaf7f99ea3f.png


  • 我们来了解FormFile的方法实现


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
}


  • 如果我们想给前端返回文件怎么办?


//添加头部映射内容
c.Writer.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%s", f.Filename))
//File以有效的方式将指定文件写入主体流。
c.File("./" + f.Filename)


c5eff3752e894a97949ff977f6fcbbd0.png


fb06bc491dc64e45ba9f5863d55d63ac.png


大功告成,我们成功的将文件内容发送给前端。


二、多文件上传


多文件上传就是一次可以上传多个文件,不需要一个文件一个文件上传,这也便于上传文件的人。


获取多文件的MultipartForm方法


1.MultipartForm:MultipartForm是经过解析的多部分表单(表单里面只有两个属性Value和File),包括文件上传。


2.File: File部分存储在内存或磁盘上,可通过*FileHeader的Open方法访问。


3.Value: Value部分存储为字符串。


两者都通过map的字段名进行键控。


func main() {
  //多文件上传
  r := gin.Default()
  r.POST("/multFile", func(c *gin.Context) {
    form, err := c.MultipartForm()
    if err != nil {
      log.Fatal(err)
    }
    //通过字段名映射
    f := form.File["file"]
    //for range遍历文件
    for _, file := range f {
      fmt.Println(file.Filename)
      c.SaveUploadedFile(file, "./"+file.Filename)
      c.Writer.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%s"+file.Filename))
      c.File("./" + file.Filename)
    }
  })
  r.Run(":8080")
}


打开postman选择POST请求,选择Body里的form-data上传多个文件,访问http://localhost:8080/multFile


fe27471783df4211a348b564daf64404.png

53c518820b9948caa74afbc1c649e353.png


我们成功将两个文件接收并保存下来,并返回给前端了第一个文件。

目录
相关文章
|
Go API 网络架构
Gin框架快速入门1
Gin框架快速入门1
123 0
|
1月前
|
JSON 应用服务中间件 API
使用 Gin 框架实现文件上传:机制与深入解析
使用 Gin 框架实现文件上传:机制与深入解析
|
5月前
|
JSON 中间件 数据格式
Gin框架学习笔记(五) ——文件上传与路由中间件
Gin框架学习笔记(五) ——文件上传与路由中间件
|
5月前
|
XML 存储 JSON
gin框架学习笔记(二) ——相关数据与文件的响应
gin框架学习笔记(二) ——相关数据与文件的响应
|
5月前
|
JSON 中间件 API
Gin框架笔记(一) Gin框架的安装与Hello World
Gin框架笔记(一) Gin框架的安装与Hello World
184 0
|
6月前
|
存储 人工智能 Go
探索Gin框架:Golang使用Gin完成文件上传
探索Gin框架:Golang使用Gin完成文件上传
|
6月前
|
XML JSON 中间件
快速入门Gin框架搭建HTTP服务
快速入门Gin框架搭建HTTP服务
105 0
|
存储 前端开发 程序员
Day05:Gin框架快速入门04 文件上传和下载| 青训营
Day05:Gin框架快速入门04 文件上传和下载| 青训营
|
JSON 缓存 程序员
Day04:Gin框架快速入门02 请求| 青训营
Day04:Gin框架快速入门02 请求| 青训营
|
API
Gin框架学习(四)
来这里学Gin框架,目标明确不迷茫。
157 0
Gin框架学习(四)
下一篇
无影云桌面