github.com/qiuhoude/go-web@v0.0.0-20220223060959-ab545e78f20d/blogweb_gin/controllers/album_controller.go (about) 1 package controllers 2 3 import ( 4 "fmt" 5 "github.com/gin-gonic/gin" 6 "github.com/qiuhoude/go-web/blogweb_gin/logs" 7 "github.com/qiuhoude/go-web/blogweb_gin/models" 8 "net/http" 9 "os" 10 "path/filepath" 11 "time" 12 ) 13 14 func AlbumGet(c *gin.Context) { 15 islogin := GetSession(c) 16 albums, _ := models.FindAllAlbums() 17 18 c.HTML(http.StatusOK, "album.html", gin.H{"IsLogin": islogin, "Album": albums}) 19 } 20 21 func UpladPost(c *gin.Context) { 22 fileHeader, err := c.FormFile("upload") 23 if err != nil { 24 responseErr(c, err) 25 return 26 } 27 logs.Info.Println("name:", fileHeader.Filename, fileHeader.Size) 28 29 fileExt := filepath.Ext(fileHeader.Filename) 30 logs.Info.Println("ext:", filepath.Ext(fileHeader.Filename)) // 扩展名 31 fileType := "other" 32 //判断后缀为图片的文件,如果是图片我们才存入到数据库中 33 if fileExt == ".jpg" || fileExt == ".png" || fileExt == ".gif" || fileExt == ".jpeg" { 34 fileType = "img" 35 } 36 37 now := time.Now() 38 //文件夹路径 39 fileDir := fmt.Sprintf("static/upload/%s/%d/%d/%d", fileType, now.Year(), now.Month(), now.Day()) 40 err = os.MkdirAll(fileDir, os.ModePerm) //创建对应的文件夹 41 if err != nil { 42 responseErr(c, err) 43 return 44 } 45 timeStamp := now.Unix() 46 fileName := fmt.Sprintf("%d-%s", timeStamp, fileHeader.Filename) 47 filePathStr := filepath.Join(fileDir, fileName) 48 49 //将浏览器客户端上传的文件拷贝到本地路径的文件里面,此处也可以使用io操作 50 c.SaveUploadedFile(fileHeader, filePathStr) 51 52 filePathStrUnix := filepath.ToSlash(filePathStr) 53 if fileType == "img" { 54 // 如果是图片存到数据库 55 album := models.Album{0, filePathStrUnix, fileName, 0, timeStamp} // 56 models.InsertAlbum(album) 57 } 58 c.JSON(http.StatusOK, gin.H{"code": 1, "message": "上传成功"}) 59 } 60 61 func responseErr(c *gin.Context, err error) { 62 c.JSON(http.StatusOK, gin.H{"code": 0, "message": err}) 63 }