From e98c209e4a0ad308f6dc05fa4471a73895ca57a5 Mon Sep 17 00:00:00 2001 From: litianxiang Date: Fri, 24 Oct 2025 17:46:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E4=BB=B6=E8=A1=A5=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/constant/MinioFileConstants.java | 264 ++++++++++++++++++ .../impl/CustomerPhotoServiceImpl.java | 2 +- .../impl/ImageCompositionServiceImpl.java | 3 +- .../service/impl/TryOnEffectServiceImpl.java | 3 +- .../util/ImageCompositionUtil.java | 2 +- .../com/aida/lanecarford/util/MinioUtil.java | 5 +- 6 files changed, 269 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/aida/lanecarford/common/constant/MinioFileConstants.java diff --git a/src/main/java/com/aida/lanecarford/common/constant/MinioFileConstants.java b/src/main/java/com/aida/lanecarford/common/constant/MinioFileConstants.java new file mode 100644 index 0000000..aaad702 --- /dev/null +++ b/src/main/java/com/aida/lanecarford/common/constant/MinioFileConstants.java @@ -0,0 +1,264 @@ +package com.aida.lanecarford.common.constant; + +import java.util.UUID; + +/** + * MinIO文件命名常量类 + * 统一管理不同类型图片的命名规范 + * + * @author AI Assistant + * @since 2024-01-01 + */ +public class MinioFileConstants { + + /** + * 文件路径分隔符 + */ + public static final String PATH_SEPARATOR = "/"; + + /** + * 图片文件扩展名 + */ + public static final String PNG_EXTENSION = ".png"; + public static final String JPG_EXTENSION = ".jpg"; + public static final String JPEG_EXTENSION = ".jpeg"; + + /** + * 顾客照片目录 + */ + public static final String CUSTOMER_PHOTO_DIR = "customer_photo"; + + /** + * 模特照片目录 + */ + public static final String MODEL_PHOTO_DIR = "model_photo"; + + /** + * 风格图片目录 + */ + public static final String STYLE_IMAGE_DIR = "style_image"; + + /** + * 试穿结果图片目录 + */ + public static final String TRY_ON_RESULT_DIR = "try_on_result"; + + /** + * 合成图片目录 + */ + public static final String COMPOSED_IMAGE_DIR = "composed_image"; + + /** + * 生成顾客照片文件名 + * 格式: 桶名/customer_photo/UUID.png + * + * @param bucketName 桶名 + * @return 完整的文件路径 + */ + public static String generateCustomerPhotoPath(String bucketName) { + return bucketName + PATH_SEPARATOR + CUSTOMER_PHOTO_DIR + PATH_SEPARATOR + UUID.randomUUID() + PNG_EXTENSION; + } + + /** + * 生成顾客照片文件名(仅路径部分) + * 格式: customer_photo/UUID.png + * + * @return 文件路径(不含桶名) + */ + public static String generateCustomerPhotoObjectName() { + return CUSTOMER_PHOTO_DIR + PATH_SEPARATOR + UUID.randomUUID() + PNG_EXTENSION; + } + + /** + * 生成模特照片文件名 + * 格式: 桶名/model_photo/UUID.png + * + * @param bucketName 桶名 + * @return 完整的文件路径 + */ + public static String generateModelPhotoPath(String bucketName) { + return bucketName + PATH_SEPARATOR + MODEL_PHOTO_DIR + PATH_SEPARATOR + UUID.randomUUID() + PNG_EXTENSION; + } + + /** + * 生成模特照片文件名(仅路径部分) + * 格式: model_photo/UUID.png + * + * @return 文件路径(不含桶名) + */ + public static String generateModelPhotoObjectName() { + return MODEL_PHOTO_DIR + PATH_SEPARATOR + UUID.randomUUID() + PNG_EXTENSION; + } + + /** + * 生成风格图片文件名 + * 格式: 桶名/style_image/UUID.png + * + * @param bucketName 桶名 + * @return 完整的文件路径 + */ + public static String generateStyleImagePath(String bucketName) { + return bucketName + PATH_SEPARATOR + STYLE_IMAGE_DIR + PATH_SEPARATOR + UUID.randomUUID() + PNG_EXTENSION; + } + + /** + * 生成风格图片文件名(仅路径部分) + * 格式: style_image/UUID.png + * + * @return 文件路径(不含桶名) + */ + public static String generateStyleImageObjectName() { + return STYLE_IMAGE_DIR + PATH_SEPARATOR + UUID.randomUUID() + PNG_EXTENSION; + } + + /** + * 生成试穿结果图片文件名 + * 格式: 桶名/try_on_result/UUID.png + * + * @param bucketName 桶名 + * @return 完整的文件路径 + */ + public static String generateTryOnResultPath(String bucketName) { + return bucketName + PATH_SEPARATOR + TRY_ON_RESULT_DIR + PATH_SEPARATOR + UUID.randomUUID() + PNG_EXTENSION; + } + + /** + * 生成试穿结果图片文件名(仅路径部分) + * 格式: try_on_result/UUID.png + * + * @return 文件路径(不含桶名) + */ + public static String generateTryOnResultObjectName() { + return TRY_ON_RESULT_DIR + PATH_SEPARATOR + UUID.randomUUID() + PNG_EXTENSION; + } + + /** + * 生成合成图片文件名 + * 格式: 桶名/composed_image/UUID.jpg + * + * @param bucketName 桶名 + * @return 完整的文件路径 + */ + public static String generateComposedImagePath(String bucketName) { + return bucketName + PATH_SEPARATOR + COMPOSED_IMAGE_DIR + PATH_SEPARATOR + UUID.randomUUID() + JPG_EXTENSION; + } + + /** + * 生成合成图片文件名(仅路径部分) + * 格式: composed_image/UUID.jpg + * + * @return 文件路径(不含桶名) + */ + public static String generateComposedImageObjectName() { + return COMPOSED_IMAGE_DIR + PATH_SEPARATOR + UUID.randomUUID() + JPG_EXTENSION; + } + + /** + * 生成带前缀的试穿结果图片文件名 + * 格式: 桶名/try_on_result/tryon_result_UUID.png + * + * @param bucketName 桶名 + * @return 完整的文件路径 + */ + public static String generateTryOnResultWithPrefixPath(String bucketName) { + return bucketName + PATH_SEPARATOR + TRY_ON_RESULT_DIR + PATH_SEPARATOR + "tryon_result_" + UUID.randomUUID() + PNG_EXTENSION; + } + + /** + * 生成带前缀的试穿结果图片文件名(仅路径部分) + * 格式: try_on_result/tryon_result_UUID.png + * + * @return 文件路径(不含桶名) + */ + public static String generateTryOnResultWithPrefixObjectName() { + return TRY_ON_RESULT_DIR + PATH_SEPARATOR + "tryon_result_" + UUID.randomUUID() + PNG_EXTENSION; + } + + /** + * 生成带时间戳的合成图片文件名 + * 格式: 桶名/composed_image/composed_[图片数量]_images_composed_[时间戳].jpg + * + * @param bucketName 桶名 + * @param imageCount 图片数量 + * @return 完整的文件路径 + */ + public static String generateComposedImageWithTimestampPath(String bucketName, int imageCount) { + String timestamp = String.valueOf(System.currentTimeMillis()); + String suffix = imageCount + "_images_composed"; + String fileName = "composed_" + suffix + "_" + timestamp + JPG_EXTENSION; + return bucketName + PATH_SEPARATOR + COMPOSED_IMAGE_DIR + PATH_SEPARATOR + fileName; + } + + /** + * 生成带时间戳的合成图片文件名(仅路径部分) + * 格式: composed_image/composed_[图片数量]_images_composed_[时间戳].jpg + * + * @param imageCount 图片数量 + * @return 文件路径(不含桶名) + */ + public static String generateComposedImageWithTimestampObjectName(int imageCount) { + String timestamp = String.valueOf(System.currentTimeMillis()); + String suffix = imageCount + "_images_composed"; + String fileName = "composed_" + suffix + "_" + timestamp + JPG_EXTENSION; + return COMPOSED_IMAGE_DIR + PATH_SEPARATOR + fileName; + } + + /** + * 根据文件类型生成对应的对象名称 + * + * @param fileType 文件类型 + * @return 对象名称 + */ + public static String generateObjectNameByType(FileType fileType) { + return switch (fileType) { + case CUSTOMER_PHOTO -> generateCustomerPhotoObjectName(); + case MODEL_PHOTO -> generateModelPhotoObjectName(); + case STYLE_IMAGE -> generateStyleImageObjectName(); + case TRY_ON_RESULT -> generateTryOnResultObjectName(); + case COMPOSED_IMAGE -> generateComposedImageObjectName(); + }; + } + + /** + * 根据文件类型生成对应的完整路径 + * + * @param bucketName 桶名 + * @param fileType 文件类型 + * @return 完整路径 + */ + public static String generatePathByType(String bucketName, FileType fileType) { + return switch (fileType) { + case CUSTOMER_PHOTO -> generateCustomerPhotoPath(bucketName); + case MODEL_PHOTO -> generateModelPhotoPath(bucketName); + case STYLE_IMAGE -> generateStyleImagePath(bucketName); + case TRY_ON_RESULT -> generateTryOnResultPath(bucketName); + case COMPOSED_IMAGE -> generateComposedImagePath(bucketName); + }; + } + + /** + * 文件类型枚举 + */ + public enum FileType { + /** + * 顾客照片 + */ + CUSTOMER_PHOTO, + /** + * 模特照片 + */ + MODEL_PHOTO, + /** + * 风格图片 + */ + STYLE_IMAGE, + /** + * 试穿结果图片 + */ + TRY_ON_RESULT, + /** + * 合成图片 + */ + COMPOSED_IMAGE + } +} \ No newline at end of file diff --git a/src/main/java/com/aida/lanecarford/service/impl/CustomerPhotoServiceImpl.java b/src/main/java/com/aida/lanecarford/service/impl/CustomerPhotoServiceImpl.java index 2e70766..873b0f5 100644 --- a/src/main/java/com/aida/lanecarford/service/impl/CustomerPhotoServiceImpl.java +++ b/src/main/java/com/aida/lanecarford/service/impl/CustomerPhotoServiceImpl.java @@ -1,6 +1,6 @@ package com.aida.lanecarford.service.impl; -import com.aida.lanecarford.constant.MinioFileConstants; +import com.aida.lanecarford.common.constant.MinioFileConstants; import com.aida.lanecarford.dto.CustomerPhotoDto; import com.aida.lanecarford.entity.CustomerPhoto; import com.aida.lanecarford.mapper.CustomerPhotoMapper; diff --git a/src/main/java/com/aida/lanecarford/service/impl/ImageCompositionServiceImpl.java b/src/main/java/com/aida/lanecarford/service/impl/ImageCompositionServiceImpl.java index 661ff6a..ddc8513 100644 --- a/src/main/java/com/aida/lanecarford/service/impl/ImageCompositionServiceImpl.java +++ b/src/main/java/com/aida/lanecarford/service/impl/ImageCompositionServiceImpl.java @@ -1,7 +1,6 @@ package com.aida.lanecarford.service.impl; -import com.aida.lanecarford.config.MinioConfig; -import com.aida.lanecarford.constant.MinioFileConstants; +import com.aida.lanecarford.common.constant.MinioFileConstants; import com.aida.lanecarford.service.ImageCompositionService; import com.aida.lanecarford.util.ImageCompositionUtil; import com.aida.lanecarford.util.MinioUtil; diff --git a/src/main/java/com/aida/lanecarford/service/impl/TryOnEffectServiceImpl.java b/src/main/java/com/aida/lanecarford/service/impl/TryOnEffectServiceImpl.java index b392473..cbe2bac 100644 --- a/src/main/java/com/aida/lanecarford/service/impl/TryOnEffectServiceImpl.java +++ b/src/main/java/com/aida/lanecarford/service/impl/TryOnEffectServiceImpl.java @@ -3,7 +3,7 @@ package com.aida.lanecarford.service.impl; import cn.hutool.json.JSONObject; import com.aida.lanecarford.common.CommonConstant; import com.aida.lanecarford.common.response.ResultEnum; -import com.aida.lanecarford.constant.MinioFileConstants; +import com.aida.lanecarford.common.constant.MinioFileConstants; import com.aida.lanecarford.entity.CustomerPhoto; import com.aida.lanecarford.entity.ModelPhoto; import com.aida.lanecarford.entity.Style; @@ -33,7 +33,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.UUID; import java.util.concurrent.TimeUnit; /** diff --git a/src/main/java/com/aida/lanecarford/util/ImageCompositionUtil.java b/src/main/java/com/aida/lanecarford/util/ImageCompositionUtil.java index 4ad53cc..4619c21 100644 --- a/src/main/java/com/aida/lanecarford/util/ImageCompositionUtil.java +++ b/src/main/java/com/aida/lanecarford/util/ImageCompositionUtil.java @@ -1,6 +1,6 @@ package com.aida.lanecarford.util; -import com.aida.lanecarford.constant.MinioFileConstants; +import com.aida.lanecarford.common.constant.MinioFileConstants; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; diff --git a/src/main/java/com/aida/lanecarford/util/MinioUtil.java b/src/main/java/com/aida/lanecarford/util/MinioUtil.java index faaf8fb..756024d 100644 --- a/src/main/java/com/aida/lanecarford/util/MinioUtil.java +++ b/src/main/java/com/aida/lanecarford/util/MinioUtil.java @@ -1,10 +1,9 @@ package com.aida.lanecarford.util; import com.aida.lanecarford.config.MinioConfig; -import com.aida.lanecarford.constant.MinioFileConstants; +import com.aida.lanecarford.common.constant.MinioFileConstants; import com.aida.lanecarford.exception.MinioException; import io.minio.*; -import io.minio.errors.*; import io.minio.http.Method; import io.minio.messages.Bucket; import io.minio.messages.Item; @@ -20,8 +19,6 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.Base64; import java.util.List;