文件补传
This commit is contained in:
@@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.aida.lanecarford.service.impl;
|
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.dto.CustomerPhotoDto;
|
||||||
import com.aida.lanecarford.entity.CustomerPhoto;
|
import com.aida.lanecarford.entity.CustomerPhoto;
|
||||||
import com.aida.lanecarford.mapper.CustomerPhotoMapper;
|
import com.aida.lanecarford.mapper.CustomerPhotoMapper;
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package com.aida.lanecarford.service.impl;
|
package com.aida.lanecarford.service.impl;
|
||||||
|
|
||||||
import com.aida.lanecarford.config.MinioConfig;
|
import com.aida.lanecarford.common.constant.MinioFileConstants;
|
||||||
import com.aida.lanecarford.constant.MinioFileConstants;
|
|
||||||
import com.aida.lanecarford.service.ImageCompositionService;
|
import com.aida.lanecarford.service.ImageCompositionService;
|
||||||
import com.aida.lanecarford.util.ImageCompositionUtil;
|
import com.aida.lanecarford.util.ImageCompositionUtil;
|
||||||
import com.aida.lanecarford.util.MinioUtil;
|
import com.aida.lanecarford.util.MinioUtil;
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package com.aida.lanecarford.service.impl;
|
|||||||
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONObject;
|
||||||
import com.aida.lanecarford.common.CommonConstant;
|
import com.aida.lanecarford.common.CommonConstant;
|
||||||
import com.aida.lanecarford.common.response.ResultEnum;
|
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.CustomerPhoto;
|
||||||
import com.aida.lanecarford.entity.ModelPhoto;
|
import com.aida.lanecarford.entity.ModelPhoto;
|
||||||
import com.aida.lanecarford.entity.Style;
|
import com.aida.lanecarford.entity.Style;
|
||||||
@@ -33,7 +33,6 @@ import java.util.ArrayList;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.aida.lanecarford.util;
|
package com.aida.lanecarford.util;
|
||||||
|
|
||||||
import com.aida.lanecarford.constant.MinioFileConstants;
|
import com.aida.lanecarford.common.constant.MinioFileConstants;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
package com.aida.lanecarford.util;
|
package com.aida.lanecarford.util;
|
||||||
|
|
||||||
import com.aida.lanecarford.config.MinioConfig;
|
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 com.aida.lanecarford.exception.MinioException;
|
||||||
import io.minio.*;
|
import io.minio.*;
|
||||||
import io.minio.errors.*;
|
|
||||||
import io.minio.http.Method;
|
import io.minio.http.Method;
|
||||||
import io.minio.messages.Bucket;
|
import io.minio.messages.Bucket;
|
||||||
import io.minio.messages.Item;
|
import io.minio.messages.Item;
|
||||||
@@ -20,8 +19,6 @@ import java.io.ByteArrayInputStream;
|
|||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.security.InvalidKeyException;
|
|
||||||
import java.security.NoSuchAlgorithmException;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Base64;
|
import java.util.Base64;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
Reference in New Issue
Block a user