文件补传

This commit is contained in:
litianxiang
2025-10-24 17:46:41 +08:00
parent e1deaf194a
commit e98c209e4a
6 changed files with 269 additions and 10 deletions

View File

@@ -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
}
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
/**

View File

@@ -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;

View File

@@ -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;