1. 程式人生 > 其它 >GIN檔案上傳 按照日期儲存

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()
}