diff --git a/internal/async/ViewRecord.go b/internal/async/ViewRecord.go index d595cde..2afce29 100644 --- a/internal/async/ViewRecord.go +++ b/internal/async/ViewRecord.go @@ -31,7 +31,7 @@ func init() { log.Println("IP:", record.IpAddr, "点击了:", record.Title) relId := record.RelId record.Id = uuid.NewString() - database.WGorm().Transaction(func(tx *gorm.DB) error { + database.WGorm(func(tx *gorm.DB) error { err := tx.Table("blog_view_record").Create(&record).Error if err != nil { return err @@ -39,7 +39,7 @@ func init() { err2 := database.RedisTemplate.HIncrBy(ctx, consts.REDIS_BLOG_VIEW_RECORD, relId, 1).Err() return err2 }) - database.WGormUnlock() + // database.WGormUnlock() } }() diff --git a/internal/controller/admin/DiaryController.go b/internal/controller/admin/DiaryController.go index 0cd9b9d..cfdb4bd 100644 --- a/internal/controller/admin/DiaryController.go +++ b/internal/controller/admin/DiaryController.go @@ -7,7 +7,11 @@ import ( "blog/internal/model/vo" "blog/third_party/SessionUtil" "blog/third_party/database" + "bytes" "context" + "image/jpeg" + "log" + "mime/multipart" "strings" "time" @@ -32,7 +36,7 @@ func (ctrl *DiaryController) Get() { func (ctrl *DiaryController) PostSubmit() { user := SessionUtil.GetUser(ctrl.Session) - userId := user.Id + createBy := user.Username content := ctrl.Ctx.FormValue("content") var err error @@ -40,9 +44,9 @@ func (ctrl *DiaryController) PostSubmit() { ctx := context.Background() diaryId := uuid.NewString() - database.WGorm().Transaction(func(tx *gorm.DB) error { + database.WGorm(func(tx *gorm.DB) error { now := time.Now().UnixMilli() - diary := admin.AdminDiary{Id: diaryId, PublishTime: now, Del: 0, CreateTime: now, CreateBy: userId} + diary := admin.AdminDiary{Id: diaryId, PublishTime: now, Del: 0, CreateTime: now, CreateBy: createBy} ctn := vo.CommonContent{Id: uuid.NewString(), RelId: diaryId, Content: content, State: consts.CONTENT_STATE_PUBLISH} err = tx.Table("common_contents").Create(ctn).Error if err != nil { @@ -54,19 +58,20 @@ func (ctrl *DiaryController) PostSubmit() { return fileErr } fileIds := []string{} - for i, file := range files { - defer file.Close() + for i, _ := range files { + // defer file.Close() header := headers[i] - fileSize := header.Size - var bytes []byte = make([]byte, fileSize) - _, err = file.Read(bytes) - if err != nil { - return err - } + bytes := compressImg(header) + fileSize := int64(len(bytes)) + // var bytes []byte = make([]byte, fileSize) + // _, err = file.Read(bytes) + // if err != nil { + // return err + // } fileName := header.Filename fileId := uuid.NewString() fileIds = append(fileIds, fileId) - sysFile := admin.SysFile{Id: fileId, FileName: fileName, FileSize: fileSize, Data: bytes, Sort: i, Del: 0, CreateBy: userId, CreateTime: now} + sysFile := admin.SysFile{Id: fileId, FileName: fileName, FileSize: fileSize, Data: bytes, Sort: i, Del: 0, CreateBy: createBy, CreateTime: now} err = tx.Table("common_files").Create(&sysFile).Error if err != nil { return err @@ -90,7 +95,6 @@ func (ctrl *DiaryController) PostSubmit() { err = database.RedisTemplate.Set(ctx, consts.REDIS_BLOG_CONTENT+diaryId, content, time.Duration(0)).Err() return err }) - defer database.WGormUnlock() if err != nil { ctrl.Ctx.JSON(AjaxResult.OkMsg("发布成功", nil)) @@ -98,3 +102,36 @@ func (ctrl *DiaryController) PostSubmit() { } ctrl.Ctx.JSON(AjaxResult.Error("发布失败")) } + +var compress int64 = 1 * 1024 * 1024 + +// 判断是否JPEG格式,按大小进行压缩 +func compressImg(fileHeader *multipart.FileHeader) []byte { + fileName := fileHeader.Filename + fileSize := fileHeader.Size + file, _ := fileHeader.Open() + + if strings.HasSuffix(fileName, "jpg") || strings.HasSuffix(fileName, "jpeg") { + quality := 100 + if fileSize > compress { + mul := fileSize / compress + if mul > 1 { + quality = 70 + } + + log.Println("JPG格式图片,判断是否压缩") + i, err := jpeg.Decode(file) + if err != nil { + return nil + } + var buf []byte + b := bytes.NewBuffer(buf) + jpeg.Encode(b, i, &jpeg.Options{Quality: quality}) + return b.Bytes() + } + } + + var bytes []byte = make([]byte, fileSize) + file.Read(bytes) + return bytes +} diff --git a/internal/controller/admin/FileController.go b/internal/controller/admin/FileController.go index 56e3b81..74395cd 100644 --- a/internal/controller/admin/FileController.go +++ b/internal/controller/admin/FileController.go @@ -67,13 +67,13 @@ func (ctrl *FileController) PostUpload() { Data: bytes, State: "1", Del: 0, } - err = database.WGorm().Transaction(func(tx *gorm.DB) error { + err = database.WGorm(func(tx *gorm.DB) error { err2 := tx.Table("common_files").Create(sysFile).Error return err2 // log.Println(sysFile) // return nil }) - defer database.WGormUnlock() + if err != nil { // { // success : 0 | 1, // 0 表示上传失败,1 表示上传成功 @@ -99,7 +99,7 @@ func (ctrl *FileController) DelFile() { return } ctx := context.Background() - err := database.WGorm().Transaction(func(tx *gorm.DB) error { + err := database.WGorm(func(tx *gorm.DB) error { txErr := tx.Table("common_files").Delete(&vo.CommonFiles{Id: id}).Error if txErr != nil { return txErr @@ -108,7 +108,6 @@ func (ctrl *FileController) DelFile() { return txErr }) - defer database.WGormUnlock() if err != nil { ctrl.Ctx.JSON(AjaxResult.Error("删除失败")) diff --git a/internal/service/ArticleService.go b/internal/service/ArticleService.go index 05c1219..9dc7528 100644 --- a/internal/service/ArticleService.go +++ b/internal/service/ArticleService.go @@ -96,7 +96,7 @@ func (*articleService) CreateArticle(articel *admin.AdminArticle) (string, error articel.Del = 0 articel.State = consts.ARTICLE_STATE_DRAFT - err := database.WGorm().Transaction(func(tx *gorm.DB) error { + err := database.WGorm(func(tx *gorm.DB) error { contentId := uuid.NewString() content := articel.Content commonContent := vo.CommonContent{Id: contentId, RelId: articleId, Content: content, State: consts.CONTENT_STATE_DOWN} @@ -108,7 +108,7 @@ func (*articleService) CreateArticle(articel *admin.AdminArticle) (string, error err = tx.Table("blog_articles").Create(*articel).Error return err }) - defer database.WGormUnlock() + return articleId, err } @@ -116,7 +116,7 @@ func (*articleService) UpdateArticle(articel *admin.AdminArticle) (string, error time := time.Now().UnixMilli() articleId := articel.Id articel.UpdateTime = time - err := database.WGorm().Transaction(func(tx *gorm.DB) error { + err := database.WGorm(func(tx *gorm.DB) error { //更新Article tx.Table("blog_articles").Updates(articel) @@ -124,7 +124,7 @@ func (*articleService) UpdateArticle(articel *admin.AdminArticle) (string, error err := tx.Table("common_contents").Where("rel_id", articleId).UpdateColumn("content", articel.Content).Error return err }) - defer database.WGormUnlock() + return articleId, err } @@ -146,7 +146,7 @@ func (*articleService) PublishArticle(id string) error { } article.State = consts.ARTICLE_STATE_PUBLISH - err = database.WGorm().Transaction(func(tx *gorm.DB) error { + err = database.WGorm(func(tx *gorm.DB) error { var txErr error = tx.Table("blog_articles").Updates(&article).Error if txErr != nil { return errors.New("文章更新错误") @@ -170,7 +170,7 @@ func (*articleService) PublishArticle(id string) error { return txErr }) - defer database.WGormUnlock() + return err } @@ -185,7 +185,7 @@ func (*articleService) UnPublishArticle(id string) error { return errors.New("撤下失败,文章状态不是已发布状态,无法撤下") } - err = database.WGorm().Transaction(func(tx *gorm.DB) error { + err = database.WGorm(func(tx *gorm.DB) error { var txErr error ctx := context.Background() txErr = database.RedisTemplate.ZRemRangeByScore(ctx, consts.REDIS_BLOG_ARTICLE_LATEST, @@ -213,7 +213,6 @@ func (*articleService) UnPublishArticle(id string) error { return txErr }) - defer database.WGormUnlock() return err } @@ -221,11 +220,10 @@ func (*articleService) UnPublishArticle(id string) error { func (*articleService) DelArticle(id string) error { // articel := ArticleService.GetAdminArticle(id) // err := database.GormTemplate.Table("blog_articles").Where("id = ?", id).First(&article).Error - err := database.WGorm().Transaction(func(tx *gorm.DB) error { + err := database.WGorm(func(tx *gorm.DB) error { txErr := tx.Table("blog_articles").Where("id = ?", id).UpdateColumn("del", 1).Error return txErr }) - defer database.WGormUnlock() return err } diff --git a/template/admin/diary/index.html b/template/admin/diary/index.html index bbdb1d8..386a23b 100644 --- a/template/admin/diary/index.html +++ b/template/admin/diary/index.html @@ -32,7 +32,7 @@ - + diff --git a/template/admin/file/index.html b/template/admin/file/index.html index c98738d..aad5f5a 100644 --- a/template/admin/file/index.html +++ b/template/admin/file/index.html @@ -86,7 +86,7 @@ {{item.fileName}}