✨ improve image sharing function
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"context"
|
||||
"errors"
|
||||
"schisandra-album-cloud-microservices/app/auth/model/mysql/model"
|
||||
"schisandra-album-cloud-microservices/common/constant"
|
||||
|
||||
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
|
||||
"schisandra-album-cloud-microservices/app/auth/api/internal/types"
|
||||
@@ -33,7 +34,7 @@ func (l *CreateAlbumLogic) CreateAlbum(req *types.AlbumCreateRequest) (resp *typ
|
||||
storageAlbum := &model.ScaStorageAlbum{
|
||||
UserID: uid,
|
||||
AlbumName: req.Name,
|
||||
AlbumType: "0",
|
||||
AlbumType: constant.AlbumTypeMine,
|
||||
}
|
||||
err = l.svcCtx.DB.ScaStorageAlbum.Create(storageAlbum)
|
||||
if err != nil {
|
||||
|
@@ -68,6 +68,7 @@ func (l *GetAlbumDetailLogic) GetAlbumDetail(req *types.AlbumDetailListRequest)
|
||||
storageInfo.FileName,
|
||||
storageInfo.CreatedAt,
|
||||
storageThumb.ThumbPath,
|
||||
storageInfo.Path,
|
||||
storageThumb.ThumbW,
|
||||
storageThumb.ThumbH,
|
||||
storageThumb.ThumbSize).
|
||||
@@ -86,17 +87,17 @@ func (l *GetAlbumDetailLogic) GetAlbumDetail(req *types.AlbumDetailListRequest)
|
||||
return &types.AlbumDetailListResponse{}, nil
|
||||
}
|
||||
|
||||
//// 加载用户oss配置信息
|
||||
//cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider
|
||||
//ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider)
|
||||
//if err != nil {
|
||||
// return nil, err
|
||||
//}
|
||||
//
|
||||
//service, err := l.svcCtx.StorageManager.GetStorage(uid, ossConfig)
|
||||
//if err != nil {
|
||||
// return nil, errors.New("get storage failed")
|
||||
//}
|
||||
// 加载用户oss配置信息
|
||||
cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider
|
||||
ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
service, err := l.svcCtx.StorageManager.GetStorage(uid, ossConfig)
|
||||
if err != nil {
|
||||
return nil, errors.New("get storage failed")
|
||||
}
|
||||
|
||||
// 按日期进行分组
|
||||
var wg sync.WaitGroup
|
||||
@@ -114,6 +115,11 @@ func (l *GetAlbumDetailLogic) GetAlbumDetail(req *types.AlbumDetailListRequest)
|
||||
logx.Error(err)
|
||||
return
|
||||
}
|
||||
url, err := service.PresignedURL(l.ctx, ossConfig.BucketName, dbFileInfo.Path, time.Hour*24*7)
|
||||
if err != nil {
|
||||
logx.Error(err)
|
||||
return
|
||||
}
|
||||
// 使用 Load 或 Store 确保原子操作
|
||||
value, _ := groupedImages.LoadOrStore(date, []types.ImageMeta{})
|
||||
images := value.([]types.ImageMeta)
|
||||
@@ -121,7 +127,8 @@ func (l *GetAlbumDetailLogic) GetAlbumDetail(req *types.AlbumDetailListRequest)
|
||||
images = append(images, types.ImageMeta{
|
||||
ID: dbFileInfo.ID,
|
||||
FileName: dbFileInfo.FileName,
|
||||
URL: presignedUrl.String(),
|
||||
Thumbnail: presignedUrl.String(),
|
||||
URL: url,
|
||||
Width: dbFileInfo.ThumbW,
|
||||
Height: dbFileInfo.ThumbH,
|
||||
CreatedAt: dbFileInfo.CreatedAt.Format("2006-01-02 15:04:05"),
|
||||
|
@@ -3,6 +3,7 @@ package storage
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"gorm.io/gen"
|
||||
"gorm.io/gen/field"
|
||||
|
||||
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
|
||||
@@ -37,7 +38,15 @@ func (l *GetAlbumListLogic) GetAlbumList(req *types.AlbumListRequest) (resp *typ
|
||||
} else {
|
||||
orderConditions = append(orderConditions, storageAlbum.AlbumName.Desc())
|
||||
}
|
||||
albums, err := storageAlbum.Where(storageAlbum.UserID.Eq(uid), storageAlbum.AlbumType.Eq(req.Type)).Order(orderConditions...).Find()
|
||||
var typeConditions []gen.Condition
|
||||
if req.Type != -1 {
|
||||
// 获取全部相册
|
||||
typeConditions = append(typeConditions, storageAlbum.AlbumType.Eq(req.Type))
|
||||
typeConditions = append(typeConditions, storageAlbum.UserID.Eq(uid))
|
||||
}
|
||||
albums, err := storageAlbum.Where(
|
||||
typeConditions...).
|
||||
Order(orderConditions...).Find()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@@ -0,0 +1,80 @@
|
||||
package storage
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
|
||||
"schisandra-album-cloud-microservices/app/auth/api/internal/types"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type GetUserStorageListLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewGetUserStorageListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetUserStorageListLogic {
|
||||
return &GetUserStorageListLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
// providerNameMap 存储商映射表
|
||||
var providerNameMap = map[string]string{
|
||||
"ali": "阿里云OSS",
|
||||
"tencent": "腾讯云COS",
|
||||
"aws": "Amazon S3",
|
||||
"qiniu": "七牛云",
|
||||
"huawei": "华为云OBS",
|
||||
}
|
||||
|
||||
func (l *GetUserStorageListLogic) GetUserStorageList() (resp *types.StorageListResponse, err error) {
|
||||
uid, ok := l.ctx.Value("user_id").(string)
|
||||
if !ok {
|
||||
return nil, errors.New("user_id not found")
|
||||
}
|
||||
storageConfig := l.svcCtx.DB.ScaStorageConfig
|
||||
storageConfigs, err := storageConfig.Select(
|
||||
storageConfig.Provider,
|
||||
storageConfig.Bucket).
|
||||
Where(
|
||||
storageConfig.UserID.Eq(uid)).Find()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// 使用 map 组织数据
|
||||
providerMap := make(map[string][]types.StorageMeta)
|
||||
|
||||
for _, config := range storageConfigs {
|
||||
providerMap[config.Provider] = append(providerMap[config.Provider], types.StorageMeta{
|
||||
Value: config.Bucket,
|
||||
Name: config.Bucket,
|
||||
})
|
||||
}
|
||||
// 组装返回结构
|
||||
var records []types.StroageNode
|
||||
for provider, buckets := range providerMap {
|
||||
records = append(records, types.StroageNode{
|
||||
Value: provider,
|
||||
Name: l.getProviderName(provider),
|
||||
Children: buckets,
|
||||
})
|
||||
}
|
||||
// 返回数据
|
||||
return &types.StorageListResponse{
|
||||
Records: records,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// getProviderName 获取存储商的中文名称
|
||||
func (l *GetUserStorageListLogic) getProviderName(provider string) string {
|
||||
if name, exists := providerNameMap[provider]; exists {
|
||||
return name
|
||||
}
|
||||
return provider
|
||||
}
|
@@ -288,6 +288,7 @@ func (l *UploadFileLogic) uploadFileToOSS(uid string, header *multipart.FileHead
|
||||
}
|
||||
|
||||
objectKey := path.Join(
|
||||
"image_space",
|
||||
uid,
|
||||
time.Now().Format("2006/01"), // 按年/月划分目录
|
||||
l.classifyFile(result.FileType, result.IsScreenshot),
|
||||
|
Reference in New Issue
Block a user