diff --git a/minio/minio.go b/minio/minio.go index 5b3b469..91b21ed 100644 --- a/minio/minio.go +++ b/minio/minio.go @@ -65,13 +65,33 @@ func initMinIO(ctx context.Context) error { return nil } -func UploadImage(fileHeader *ghttp.UploadFile) (presignedUrl string, err error) { - ctx := context.Background() +func UploadImages(ctx context.Context, fileHeaders []*ghttp.UploadFile) (imagesUrls []string, err error) { + imageUrls := make([]string, 0, len(fileHeaders)) // 存储上传后的图片访问地址 + for _, fileHeader := range fileHeaders { + var imageUrl string + imageUrl, err = uploadImg(ctx, fileHeader) + if err != nil { + return nil, err + } + imageUrls = append(imageUrls, imageUrl) + } + return imageUrls, err +} + +func UploadImage(ctx context.Context, fileHeader *ghttp.UploadFile) (imagesUrl string, err error) { // 初始化 MinIO 客户端 err = initMinIO(ctx) if err != nil { return "", fmt.Errorf("初始化 MinIO 客户端失败: %w", err) } + imageUrl, err := uploadImg(ctx, fileHeader) + if err != nil { + return "", err + } + return imageUrl, err +} + +func uploadImg(ctx context.Context, fileHeader *ghttp.UploadFile) (imagesUrl string, err error) { // 生成唯一的 MinIO 对象名(避免覆盖) fileExt := filepath.Ext(fileHeader.Filename) // 原文件后缀(如 .jpg) uniqueID := uuid.New().String()[:8] // 8位随机UUID @@ -91,7 +111,7 @@ func UploadImage(fileHeader *ghttp.UploadFile) (presignedUrl string, err error) } // 执行图片上传 _, err = minioClient.PutObject( - context.Background(), + ctx, minioCfg.BucketName, objectName, file, diff --git a/mongo/mongo.go b/mongo/mongo.go index 35b8f3e..baabbe5 100644 --- a/mongo/mongo.go +++ b/mongo/mongo.go @@ -496,3 +496,25 @@ func Count(ctx context.Context, filter bson.M, collection string) (count int64, } return } + +// EntityToBSONM 将 *entity/entity 转换为 bson.M +// 支持传入值类型或指针类型,返回 bson.M 和错误信息 +func EntityToBSONM(entity interface{}) (bson.M, error) { + // 第一步:判断入参是否为 nil 或无效类型 + if entity == nil { + return nil, fmt.Errorf("传入的 entity 实例为 nil") + } + // 第二步:将 entity 序列化为 BSON 字节流 + // bson.Marshal 支持值类型和指针类型,会自动解析结构体的 bson 标签 + bsonBytes, err := bson.Marshal(entity) + if err != nil { + return nil, fmt.Errorf("entity 序列化为 BSON 字节流失败:%w", err) + } + // 第三步:将 BSON 字节流反序列化为 bson.M + var bsonMap bson.M + err = bson.Unmarshal(bsonBytes, &bsonMap) + if err != nil { + return nil, fmt.Errorf("BSON 字节流反序列化为 bson.M 失败:%w", err) + } + return bsonMap, nil +}