mirror of
				https://github.com/yangjian102621/geekai.git
				synced 2025-11-04 16:23:42 +08:00 
			
		
		
		
	feat: delete the old avatar image file when update the user profile
This commit is contained in:
		@@ -35,6 +35,13 @@ func NewDefaultConfig() *types.AppConfig {
 | 
			
		||||
		},
 | 
			
		||||
		ApiConfig: types.ChatPlusApiConfig{},
 | 
			
		||||
		ExtConfig: types.ChatPlusExtConfig{Token: utils.RandString(32)},
 | 
			
		||||
		OSS: types.OSSConfig{
 | 
			
		||||
			Active: "local",
 | 
			
		||||
			Local: types.LocalStorageConfig{
 | 
			
		||||
				BaseURL:  "http://localhost/5678/static/upload",
 | 
			
		||||
				BasePath: "./static/upload",
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@ func NewUploadHandler(app *core.AppServer, db *gorm.DB, manager *oss.UploaderMan
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (h *UploadHandler) Upload(c *gin.Context) {
 | 
			
		||||
	fileURL, err := h.uploaderManager.GetActiveService().PutFile(c)
 | 
			
		||||
	fileURL, err := h.uploaderManager.GetActiveService().PutFile(c, "file")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		resp.ERROR(c, fmt.Sprintf("文件上传失败: %s", err.Error()))
 | 
			
		||||
		return
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@ package handler
 | 
			
		||||
import (
 | 
			
		||||
	"chatplus/core"
 | 
			
		||||
	"chatplus/core/types"
 | 
			
		||||
	"chatplus/service/oss"
 | 
			
		||||
	"chatplus/store"
 | 
			
		||||
	"chatplus/store/model"
 | 
			
		||||
	"chatplus/store/vo"
 | 
			
		||||
@@ -20,13 +21,19 @@ import (
 | 
			
		||||
 | 
			
		||||
type UserHandler struct {
 | 
			
		||||
	BaseHandler
 | 
			
		||||
	db       *gorm.DB
 | 
			
		||||
	searcher *xdb.Searcher
 | 
			
		||||
	leveldb  *store.LevelDB
 | 
			
		||||
	db            *gorm.DB
 | 
			
		||||
	searcher      *xdb.Searcher
 | 
			
		||||
	leveldb       *store.LevelDB
 | 
			
		||||
	uploadManager *oss.UploaderManager
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewUserHandler(app *core.AppServer, db *gorm.DB, searcher *xdb.Searcher, levelDB *store.LevelDB) *UserHandler {
 | 
			
		||||
	handler := &UserHandler{db: db, searcher: searcher, leveldb: levelDB}
 | 
			
		||||
func NewUserHandler(
 | 
			
		||||
	app *core.AppServer,
 | 
			
		||||
	db *gorm.DB,
 | 
			
		||||
	searcher *xdb.Searcher,
 | 
			
		||||
	levelDB *store.LevelDB,
 | 
			
		||||
	manager *oss.UploaderManager) *UserHandler {
 | 
			
		||||
	handler := &UserHandler{db: db, searcher: searcher, leveldb: levelDB, uploadManager: manager}
 | 
			
		||||
	handler.App = app
 | 
			
		||||
	return handler
 | 
			
		||||
}
 | 
			
		||||
@@ -256,6 +263,7 @@ func (h *UserHandler) ProfileUpdate(c *gin.Context) {
 | 
			
		||||
	}
 | 
			
		||||
	h.db.First(&user, user.Id)
 | 
			
		||||
	user.Nickname = data.Nickname
 | 
			
		||||
	oldAvatar := user.Avatar
 | 
			
		||||
	user.Avatar = data.Avatar
 | 
			
		||||
 | 
			
		||||
	var chatConfig types.ChatConfig
 | 
			
		||||
@@ -278,6 +286,14 @@ func (h *UserHandler) ProfileUpdate(c *gin.Context) {
 | 
			
		||||
		resp.ERROR(c, "更新用户信息失败")
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// remove the old avatar image file
 | 
			
		||||
	if oldAvatar != data.Avatar {
 | 
			
		||||
		err = h.uploadManager.GetActiveService().Delete(oldAvatar)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			logger.Error("error with delete image: ", err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	resp.SUCCESS(c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,9 @@ import (
 | 
			
		||||
	"chatplus/utils"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type LocalStorageService struct {
 | 
			
		||||
@@ -20,8 +22,8 @@ func NewLocalStorageService(config *types.AppConfig) LocalStorageService {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s LocalStorageService) PutFile(ctx *gin.Context) (string, error) {
 | 
			
		||||
	file, err := ctx.FormFile("file")
 | 
			
		||||
func (s LocalStorageService) PutFile(ctx *gin.Context, name string) (string, error) {
 | 
			
		||||
	file, err := ctx.FormFile(name)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", fmt.Errorf("error with get form: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
@@ -54,4 +56,9 @@ func (s LocalStorageService) PutImg(imageURL string) (string, error) {
 | 
			
		||||
	return utils.GenUploadUrl(s.config.BasePath, s.config.BaseURL, filePath), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s LocalStorageService) Delete(fileURL string) error {
 | 
			
		||||
	filePath := strings.Replace(fileURL, s.config.BaseURL, s.config.BasePath, 1)
 | 
			
		||||
	return os.Remove(filePath)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var _ Uploader = LocalStorageService{}
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ func (s MinioService) PutImg(imageURL string) (string, error) {
 | 
			
		||||
		return "", fmt.Errorf("error with download image: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
	fileExt := filepath.Ext(filepath.Base(imageURL))
 | 
			
		||||
	filename := fmt.Sprintf("%d%s", time.Now().UnixNano(), fileExt)
 | 
			
		||||
	filename := fmt.Sprintf("%d%s", time.Now().UnixMicro(), fileExt)
 | 
			
		||||
	info, err := s.client.PutObject(
 | 
			
		||||
		context.Background(),
 | 
			
		||||
		s.config.Bucket,
 | 
			
		||||
@@ -51,8 +51,8 @@ func (s MinioService) PutImg(imageURL string) (string, error) {
 | 
			
		||||
	return fmt.Sprintf("%s/%s/%s", s.config.Domain, s.config.Bucket, info.Key), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s MinioService) PutFile(ctx *gin.Context) (string, error) {
 | 
			
		||||
	file, err := ctx.FormFile("file")
 | 
			
		||||
func (s MinioService) PutFile(ctx *gin.Context, name string) (string, error) {
 | 
			
		||||
	file, err := ctx.FormFile(name)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", fmt.Errorf("error with get form: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
@@ -64,7 +64,7 @@ func (s MinioService) PutFile(ctx *gin.Context) (string, error) {
 | 
			
		||||
	defer fileReader.Close()
 | 
			
		||||
 | 
			
		||||
	fileExt := filepath.Ext(file.Filename)
 | 
			
		||||
	filename := fmt.Sprintf("%d%s", time.Now().UnixNano(), fileExt)
 | 
			
		||||
	filename := fmt.Sprintf("%d%s", time.Now().UnixMicro(), fileExt)
 | 
			
		||||
	info, err := s.client.PutObject(ctx, s.config.Bucket, filename, fileReader, file.Size, minio.PutObjectOptions{
 | 
			
		||||
		ContentType: file.Header.Get("Content-Type"),
 | 
			
		||||
	})
 | 
			
		||||
@@ -75,4 +75,9 @@ func (s MinioService) PutFile(ctx *gin.Context) (string, error) {
 | 
			
		||||
	return fmt.Sprintf("%s/%s/%s", s.config.Domain, s.config.Bucket, info.Key), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s MinioService) Delete(fileURL string) error {
 | 
			
		||||
	objectName := filepath.Base(fileURL)
 | 
			
		||||
	return s.client.RemoveObject(context.Background(), s.config.Bucket, objectName, minio.RemoveObjectOptions{})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var _ Uploader = MinioService{}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@ package oss
 | 
			
		||||
import "github.com/gin-gonic/gin"
 | 
			
		||||
 | 
			
		||||
type Uploader interface {
 | 
			
		||||
	PutFile(ctx *gin.Context) (string, error)
 | 
			
		||||
	PutFile(ctx *gin.Context, name string) (string, error)
 | 
			
		||||
	PutImg(imageURL string) (string, error)
 | 
			
		||||
	Delete(fileURL string) error
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -14,16 +14,16 @@ import (
 | 
			
		||||
// GenUploadPath 生成上传文件路径
 | 
			
		||||
func GenUploadPath(basePath, filename string) (string, error) {
 | 
			
		||||
	now := time.Now()
 | 
			
		||||
	dir := fmt.Sprintf("%s/upload/%d/%d", basePath, now.Year(), now.Month())
 | 
			
		||||
	dir := fmt.Sprintf("%s/%d/%d", basePath, now.Year(), now.Month())
 | 
			
		||||
	_, err := os.Stat(dir)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		err = os.MkdirAll(dir, 0755)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return "", fmt.Errorf("创建上传目录失败:%s", err)
 | 
			
		||||
			return "", fmt.Errorf("error with create upload dir:%v", err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	fileExt := filepath.Ext(filename)
 | 
			
		||||
	return fmt.Sprintf("%s/%d%s", dir, now.UnixNano(), fileExt), nil
 | 
			
		||||
	return fmt.Sprintf("%s/%d%s", dir, now.UnixMicro(), fileExt), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GenUploadUrl 生成上传文件 URL
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user