minio修改图片上传-支持多图上传
mongo增加类型转换-将entity 转换为 bson.M
This commit is contained in:
@@ -65,13 +65,33 @@ func initMinIO(ctx context.Context) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func UploadImage(fileHeader *ghttp.UploadFile) (presignedUrl string, err error) {
|
func UploadImages(ctx context.Context, fileHeaders []*ghttp.UploadFile) (imagesUrls []string, err error) {
|
||||||
ctx := context.Background()
|
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 客户端
|
// 初始化 MinIO 客户端
|
||||||
err = initMinIO(ctx)
|
err = initMinIO(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("初始化 MinIO 客户端失败: %w", err)
|
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 对象名(避免覆盖)
|
// 生成唯一的 MinIO 对象名(避免覆盖)
|
||||||
fileExt := filepath.Ext(fileHeader.Filename) // 原文件后缀(如 .jpg)
|
fileExt := filepath.Ext(fileHeader.Filename) // 原文件后缀(如 .jpg)
|
||||||
uniqueID := uuid.New().String()[:8] // 8位随机UUID
|
uniqueID := uuid.New().String()[:8] // 8位随机UUID
|
||||||
@@ -91,7 +111,7 @@ func UploadImage(fileHeader *ghttp.UploadFile) (presignedUrl string, err error)
|
|||||||
}
|
}
|
||||||
// 执行图片上传
|
// 执行图片上传
|
||||||
_, err = minioClient.PutObject(
|
_, err = minioClient.PutObject(
|
||||||
context.Background(),
|
ctx,
|
||||||
minioCfg.BucketName,
|
minioCfg.BucketName,
|
||||||
objectName,
|
objectName,
|
||||||
file,
|
file,
|
||||||
|
|||||||
@@ -496,3 +496,25 @@ func Count(ctx context.Context, filter bson.M, collection string) (count int64,
|
|||||||
}
|
}
|
||||||
return
|
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
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user