定制化开发gin框架学习-文件上传

文件上传

前言

定制化开发感谢开源项目,以及
定制化开发本人学识尚浅,如有错误,定制化开发请评论指出,谢谢!
定制化开发详细可见个人博客:

一、定制化开发单文件上传

  • 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")}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

打开postman选择POST请求,选择Body里的form-data上传文件,访问

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

  • 我们来了解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}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 如果我们想给前端返回文件怎么办?
//添加头部映射内容c.Writer.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%s", f.Filename))//File以有效的方式将指定文件写入主体流。c.File("./" + f.Filename)
  • 1
  • 2
  • 3
  • 4


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

二、多文件上传

多文件上传就是一次可以上传多个文件,不需要一个文件一个文件上传,这也便于上传文件的人。
获取多文件的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")}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

打开postman选择POST请求,选择Body里的form-data上传多个文件,访问


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

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发