mirror of
https://github.com/yangjian102621/geekai.git
synced 2025-09-17 16:56:38 +08:00
feat: delete the old avatar image file when update the user profile
This commit is contained in:
parent
46f96e94ec
commit
dec0d0dea7
@ -35,6 +35,13 @@ func NewDefaultConfig() *types.AppConfig {
|
|||||||
},
|
},
|
||||||
ApiConfig: types.ChatPlusApiConfig{},
|
ApiConfig: types.ChatPlusApiConfig{},
|
||||||
ExtConfig: types.ChatPlusExtConfig{Token: utils.RandString(32)},
|
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) {
|
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 {
|
if err != nil {
|
||||||
resp.ERROR(c, fmt.Sprintf("文件上传失败: %s", err.Error()))
|
resp.ERROR(c, fmt.Sprintf("文件上传失败: %s", err.Error()))
|
||||||
return
|
return
|
||||||
|
@ -3,6 +3,7 @@ package handler
|
|||||||
import (
|
import (
|
||||||
"chatplus/core"
|
"chatplus/core"
|
||||||
"chatplus/core/types"
|
"chatplus/core/types"
|
||||||
|
"chatplus/service/oss"
|
||||||
"chatplus/store"
|
"chatplus/store"
|
||||||
"chatplus/store/model"
|
"chatplus/store/model"
|
||||||
"chatplus/store/vo"
|
"chatplus/store/vo"
|
||||||
@ -20,13 +21,19 @@ import (
|
|||||||
|
|
||||||
type UserHandler struct {
|
type UserHandler struct {
|
||||||
BaseHandler
|
BaseHandler
|
||||||
db *gorm.DB
|
db *gorm.DB
|
||||||
searcher *xdb.Searcher
|
searcher *xdb.Searcher
|
||||||
leveldb *store.LevelDB
|
leveldb *store.LevelDB
|
||||||
|
uploadManager *oss.UploaderManager
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewUserHandler(app *core.AppServer, db *gorm.DB, searcher *xdb.Searcher, levelDB *store.LevelDB) *UserHandler {
|
func NewUserHandler(
|
||||||
handler := &UserHandler{db: db, searcher: searcher, leveldb: levelDB}
|
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
|
handler.App = app
|
||||||
return handler
|
return handler
|
||||||
}
|
}
|
||||||
@ -256,6 +263,7 @@ func (h *UserHandler) ProfileUpdate(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
h.db.First(&user, user.Id)
|
h.db.First(&user, user.Id)
|
||||||
user.Nickname = data.Nickname
|
user.Nickname = data.Nickname
|
||||||
|
oldAvatar := user.Avatar
|
||||||
user.Avatar = data.Avatar
|
user.Avatar = data.Avatar
|
||||||
|
|
||||||
var chatConfig types.ChatConfig
|
var chatConfig types.ChatConfig
|
||||||
@ -278,6 +286,14 @@ func (h *UserHandler) ProfileUpdate(c *gin.Context) {
|
|||||||
resp.ERROR(c, "更新用户信息失败")
|
resp.ERROR(c, "更新用户信息失败")
|
||||||
return
|
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)
|
resp.SUCCESS(c)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,9 @@ import (
|
|||||||
"chatplus/utils"
|
"chatplus/utils"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
type LocalStorageService struct {
|
type LocalStorageService struct {
|
||||||
@ -20,8 +22,8 @@ func NewLocalStorageService(config *types.AppConfig) LocalStorageService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s LocalStorageService) PutFile(ctx *gin.Context) (string, error) {
|
func (s LocalStorageService) PutFile(ctx *gin.Context, name string) (string, error) {
|
||||||
file, err := ctx.FormFile("file")
|
file, err := ctx.FormFile(name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("error with get form: %v", err)
|
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
|
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{}
|
var _ Uploader = LocalStorageService{}
|
||||||
|
@ -37,7 +37,7 @@ func (s MinioService) PutImg(imageURL string) (string, error) {
|
|||||||
return "", fmt.Errorf("error with download image: %v", err)
|
return "", fmt.Errorf("error with download image: %v", err)
|
||||||
}
|
}
|
||||||
fileExt := filepath.Ext(filepath.Base(imageURL))
|
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(
|
info, err := s.client.PutObject(
|
||||||
context.Background(),
|
context.Background(),
|
||||||
s.config.Bucket,
|
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
|
return fmt.Sprintf("%s/%s/%s", s.config.Domain, s.config.Bucket, info.Key), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s MinioService) PutFile(ctx *gin.Context) (string, error) {
|
func (s MinioService) PutFile(ctx *gin.Context, name string) (string, error) {
|
||||||
file, err := ctx.FormFile("file")
|
file, err := ctx.FormFile(name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("error with get form: %v", err)
|
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()
|
defer fileReader.Close()
|
||||||
|
|
||||||
fileExt := filepath.Ext(file.Filename)
|
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{
|
info, err := s.client.PutObject(ctx, s.config.Bucket, filename, fileReader, file.Size, minio.PutObjectOptions{
|
||||||
ContentType: file.Header.Get("Content-Type"),
|
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
|
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{}
|
var _ Uploader = MinioService{}
|
||||||
|
@ -3,6 +3,7 @@ package oss
|
|||||||
import "github.com/gin-gonic/gin"
|
import "github.com/gin-gonic/gin"
|
||||||
|
|
||||||
type Uploader interface {
|
type Uploader interface {
|
||||||
PutFile(ctx *gin.Context) (string, error)
|
PutFile(ctx *gin.Context, name string) (string, error)
|
||||||
PutImg(imageURL string) (string, error)
|
PutImg(imageURL string) (string, error)
|
||||||
|
Delete(fileURL string) error
|
||||||
}
|
}
|
||||||
|
@ -14,16 +14,16 @@ import (
|
|||||||
// GenUploadPath 生成上传文件路径
|
// GenUploadPath 生成上传文件路径
|
||||||
func GenUploadPath(basePath, filename string) (string, error) {
|
func GenUploadPath(basePath, filename string) (string, error) {
|
||||||
now := time.Now()
|
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)
|
_, err := os.Stat(dir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = os.MkdirAll(dir, 0755)
|
err = os.MkdirAll(dir, 0755)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("创建上传目录失败:%s", err)
|
return "", fmt.Errorf("error with create upload dir:%v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fileExt := filepath.Ext(filename)
|
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
|
// GenUploadUrl 生成上传文件 URL
|
||||||
|
Loading…
Reference in New Issue
Block a user