修改数据库事务的使用方式,无需手动添加defer释放锁,日记图片压缩
This commit is contained in:
parent
5d3d26b907
commit
167593e65f
|
@ -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()
|
||||
}
|
||||
|
||||
}()
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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("删除失败"))
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
|
||||
<v-card-text>
|
||||
<v-textarea outlined rows="8" v-model="content"></v-textarea>
|
||||
<input id="i-files" type="file" multiple style="display: none"/>
|
||||
<input id="i-files" type="file" multiple style="display: none" accept=".jpg,.jpeg,.png,.bmp,.gif"/>
|
||||
<v-container style="height: 100%">
|
||||
<v-row>
|
||||
<v-col cols="4" v-for="(img,index) in images">
|
||||
|
|
|
@ -86,7 +86,7 @@
|
|||
<span class="over-display">{{item.fileName}}</span>
|
||||
</template>
|
||||
<template #item.fileSize="{ item }">
|
||||
{{Math.round(item.fileSize/1024)}}KB
|
||||
{{new Number(item.fileSize/(1024*1024)).toFixed(3)}}MB
|
||||
</template>
|
||||
|
||||
<template #item.actions="{ item }">
|
||||
|
|
|
@ -28,11 +28,9 @@ func init() {
|
|||
}
|
||||
|
||||
// sqlite无法同时多个线程写入,需要上锁保护,读操作无需考虑
|
||||
func WGorm() *gorm.DB {
|
||||
func WGorm(txFunc func(tx *gorm.DB) error) error {
|
||||
rwMutex.Lock()
|
||||
return GormTemplate
|
||||
}
|
||||
|
||||
func WGormUnlock() {
|
||||
err := GormTemplate.Transaction(txFunc)
|
||||
rwMutex.Unlock()
|
||||
return err
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue