Gin 文件上传 按照日期存储

Gin 文件上传 按照日期存储

1 实现步骤

/*
	1.获取上传的文件
	2.获取后缀名 判断类型是否正确 .jpg .png .gif .jpeg
	3.创建图片保存目录 static/upload/20240101
	4.生成文件名称和文件保存的目录
	5.保存
*/

2 代码

// 获取当前的日期
func GetDay() string {
	template := "20060102"
	return time.Now().Format(template)
}

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

func (con ApiController) DoUpload(c *gin.Context) {
	// 1.获取上传的文件
	file, err := c.FormFile("file")
	if err != nil {
		con.Error(c)
	}
	// 2.获取后缀名 判断类型是否正确 .jpg .png .gif .jpeg
	extName := path.Ext(file.Filename)

	allowExtMap := map[string]bool{
		".jpg":  true,
		".png":  true,
		".gif":  true,
		".jpeg": true,
	}

	_, ok := allowExtMap[extName]
	if ok {
		c.JSON(http.StatusOK, gin.H{
			"err": "上传的文件不合法",
		})
	}

	// 3.创建图片保存目录
	day := GetDay()

	// 文件保存目录
	dir := path.Join("./static/upload", day)

	if err := os.MkdirAll(dir, 0666); err != nil {
		c.JSON(http.StatusOK, gin.H{
			"err": "目录创建失败",
		})
	}

	// 4.生成保存目录,以及文件名
	// 生成文件名称,防止重名的覆盖
	fileName := strconv.FormatInt(GetUnix(), 10) + extName

	dst := path.Join(dir, fileName)

	// 保存图片
	c.SaveUploadedFile(file, dst)
    
    con.Success(c)
}

posted @ 2024-01-17 11:02  春游去动物园  阅读(27)  评论(0编辑  收藏  举报