GIN文件上传 按照日期存储

func main() {
	r := gin.Default()
	//配置模板文件的路径,放在路由配置的前面:加载templates下的所有文件
	r.LoadHTMLGlob("templates/**/*")
	r.GET("/user/add", func(c *gin.Context) {
		c.HTML(http.StatusOK, "admin/useradd.html", gin.H{})
	})
	r.POST("/admin/user/doUpload", func(c *gin.Context) {
		username := c.PostForm("username")
		//1、获取上传的文件
		file, err := c.FormFile("face")
		if err != nil {
			//失败:获取上传的文件
			c.JSON(200, gin.H{
				"msg": "失败:获取上传的文件",
			})
		}
		//成功:获取上传的文件
		//2、获取文件的后缀名 判断类型是否正确 .jpg .png .gif .jpeg
		extName := path.Ext(file.Filename)
		//允许上传的格式
		allowExtMap := map[string]bool{
			".jpg":  true,
			".png":  true,
			".gif":  true,
			".jpeg": true,
		}
		if _, ok := allowExtMap[extName]; !ok {
			c.JSON(200, gin.H{
				"msg": "上传的文件不合法",
			})
			//退出
			return
		}
		//3、创建图片保存的目录  static /upload/2021/1021
		//	获取今天的日期
		day := models.GetDate()
		dir := "./static/upload/" + day
		if err := os.MkdirAll(dir, 0666); err != nil {
			//创建文件夹失败
			c.JSON(200, gin.H{
				"msg": "MkdirAll失败",
			})
		}
		//生产文件名称和文件保存的目录
		//文件名 = 获取时间戳--上传接收到的文件名称
		fileName := strconv.FormatInt(models.GetUnix(), 10) + "--" + extName
		//5、执行上传
		dst := path.Join("./static/upload", fileName)
		//成功
		//存储文件到本地
		c.SaveUploadedFile(file, dst)
		c.JSON(200, gin.H{
			"msg": "上传成功",
		})
		c.JSON(200, gin.H{
			"success":  true,
			"username": username,
			"dst":      dst,
		})
	})

	r.Run(":8080")

}
package models

import "time"

//获取当前的日期
func GetDate() string {
	template := "2006-01-02 15:04:05"
	return time.Now().Format(template)
}

//获取时间戳
func GetUnix() int64 {
	return time.Now().Unix()
}

posted @ 2021-10-25 20:45  成强  阅读(272)  评论(0)    收藏  举报