【Gin】Gin 文件上传

您所在的位置:网站首页 type=file获取文件上传路径 【Gin】Gin 文件上传

【Gin】Gin 文件上传

2023-04-01 18:45| 来源: 网络整理| 查看: 265

文章目录 Gin 文件上传单文件上传多文件上传--不同名字的多个文件多文件上传--相同名字的多个文件文件上传 按照日期存储 作者的 Gin 框架学习是根据 B站视频 Gin教程_Golang框架Gin入门实战教程 来学习的,对大地老师的评价不吹不捧,很喜欢其讲课风格,而且这个视频特别适合小白学习,强烈推荐。

Gin 文件上传

需要在上传文件的 form 表单中加入 enctype=“multipart/form-data” 属性

单文件上传

form 表单

{{ define "admin/useradd.html" }} DOCTYPE html> Title 演示文件上传 用户名 头 像 {{ end }}

main.go

func main { r := gin.Default() // 配置模板的文件 r.LoadHTMLGlob("templates/**/*") // 配置静态web目录 第一个参数表示路由,第二个参数表示映射的路径. r.Static("/static", "./static") router.POST("/admin/user/doUpload", func(c *gin.Context) { username := c.PostForm("username") file, err := c.FormFile("file") // file.Filename 获取文件名称 aaa.jpg ./static/upload/aaa.jpg dst := path.Join("./static/upload", file.Filename) if err == nil { c.SaveUploadedFile(file, dst) } c.JSON(200, gin.H{ "success": true, "username": username, "dst": dst, }) } r.Run() } 多文件上传–不同名字的多个文件

多文件上传同单文件上传,在处理请求的时候需要一个文件一个文件的处理。

多文件上传–相同名字的多个文件

form 表单

{{ define "admin/user/add.html" }} DOCTYPE html> Document 用户名: 头 像 1: 头 像 2: {{ end }}

main.go

func main() { r := gin.Default() // 配置模板的文件 r.LoadHTMLGlob("templates/**/*") // 配置静态web目录 第一个参数表示路由,第二个参数表示映射的路径. r.Static("/static", "./static") r.POST("/upload", func(c *gin.Context) { // Multipart form form, _ := c.MultipartForm() files := form.File["upload[]"] for _, file := range files { dst := path.Join("./static/upload", file.Filename) // 上传文件至指定目录 c.SaveUploadedFile(file, dst) } ctx.JSON(http.StatusOK, gin.H{ "message": "文件上传成功", "username": username, } }) r.Run() } 文件上传 按照日期存储

form 表单

{{ define "test/add.html"}} DOCTYPE html> Title 用户名 头 像 {{ end }}

业务逻辑

package main import ( "Gin_demo/models" "Gin_demo/routes" "fmt" "github.com/gin-gonic/gin" "html/template" "os" "path" "strconv" "time" ) // UnixToTime 时间戳转换成日期 func UnixToTime(timestamp int) string { t := time.Unix(int64(timestamp), 0) return t.Format("2006-01-02 15:04:05") } func main() { //gin.DisableConsoleColor() r := gin.Default() // 自定义模板函数 , 注意要把这个函数放在加载模板前 r.SetFuncMap(template.FuncMap{ "UnixToTime": UnixToTime, }) // 配置模板的文件 r.LoadHTMLGlob("templates/**/*") // 配置静态web目录 第一个参数表示路由,第二个参数表示映射的路径. r.Static("/static", "./static") r.GET("/toUpload", func(c *gin.Context) { c.HTML(200, "test/add.html", gin.H{}) }) r.POST("/upload", func(c *gin.Context) { username := c.PostForm("username") // 1、获取上层的文件 file, err := c.FormFile("file") if err == nil { // 2、获取文件的后缀名 判断类型是否正确 extName := path.Ext(file.Filename) allowExtMap := map[string]bool{ ".jpg": true, ".png": true, ".gif": true, ".jpeg": true, } _, b := allowExtMap[extName] if !b { c.String(200, "上传的文件类型不合法") return } // 3、创建图片保存目录 static/upload/... day := models.GetDay() dir := "./static/upload/" + day // 如果当前目录不存在的话,一次会创建多层 err := os.MkdirAll(dir, 0666) if err != nil { fmt.Println("err==>", err) c.String(200, "MkdirAll失败") return } // 4、生成文件名称和文件保存的目录 fileName := strconv.FormatInt(models.GetUnix(), 10) + extName // 5、执行上传 dst := path.Join(dir, fileName) c.SaveUploadedFile(file, dst) } c.JSON(200, gin.H{ "success": true, "username": username, }) }) r.Run() }

models 文件夹当中的 utils.go

package models import "time" // UnixToTime 时间戳转换成日期 func UnixToTime(timestamp int) string { t := time.Unix(int64(timestamp), 0) return t.Format("2006-01-02 15:04:05") } // DateToUnix 日期转换成时间戳 func DateToUnix(str string) int64 { template := "2006-01-02 15:04:05" t, err := time.ParseInLocation(template, str, time.Local) if err != nil { return 0 } return t.Unix() } // GetUnix 获取时间戳 func GetUnix() int64 { return time.Now().Unix() } // GetDate 获取当前的日期 func GetDate() string { template := "2006-01-02 15:04:05" return time.Now().Format(template) } // GetDay 获取年月日 func GetDay() string { template := "20060102" return time.Now().Format(template) }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3