TASK:模块化;
This commit is contained in:
127
src/main/java/com/ai/da/common/config/ThreeDSave.java
Normal file
127
src/main/java/com/ai/da/common/config/ThreeDSave.java
Normal file
@@ -0,0 +1,127 @@
|
||||
package com.ai.da.common.config;
|
||||
|
||||
import com.ai.da.common.utils.MinioUtil;
|
||||
import com.ai.da.mapper.primary.ThreeDDetailMapper;
|
||||
import com.ai.da.mapper.primary.ThreeDSimpleMapper;
|
||||
import com.ai.da.mapper.primary.entity.ThreeDDetail;
|
||||
import com.ai.da.mapper.primary.entity.ThreeDSimple;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.annotation.Resource;
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
public class ThreeDSave {
|
||||
|
||||
@Resource
|
||||
private ThreeDDetailMapper threeDDetailMapper;
|
||||
@Resource
|
||||
private ThreeDSimpleMapper threeDSimpleMapper;
|
||||
@Resource
|
||||
private MinioUtil minioUtil;
|
||||
@PostConstruct
|
||||
public void test() {
|
||||
// minioSave();
|
||||
}
|
||||
|
||||
private void minioSave() {
|
||||
// 指定目标文件夹路径
|
||||
String folderPath = "C:\\workspace\\3D\\3D虚拟 1-7\\3D服装整理\\femaleZip";
|
||||
|
||||
// 创建文件对象
|
||||
File folder = new File(folderPath);
|
||||
|
||||
// 检查文件夹是否存在且是目录
|
||||
if (folder.exists() && folder.isDirectory()) {
|
||||
// 获取所有 .zip 文件
|
||||
File[] zipFiles = folder.listFiles((dir, name) -> name.toLowerCase().endsWith(".zip"));
|
||||
|
||||
List<String> zipFileNameList = new ArrayList<>();
|
||||
// 输出文件名
|
||||
if (zipFiles != null) {
|
||||
for (File file : zipFiles) {
|
||||
String zipFileName = file.getName();
|
||||
String[] split = zipFileName.split("_");
|
||||
String zipName = split[0];
|
||||
String sizeWithSuffix = split[1];
|
||||
String[] sizeWithSuffixSplit = sizeWithSuffix.split("\\.");
|
||||
String size = sizeWithSuffixSplit[0];
|
||||
// 找到第一个字母的位置
|
||||
int index = 0;
|
||||
while (index < size.length() && Character.UnicodeBlock.of(size.charAt(index)) == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS) {
|
||||
index++;
|
||||
}
|
||||
|
||||
if (index > 0 && index < size.length()) {
|
||||
String prefix = size.substring(0, index); // "亚码"
|
||||
String suffix = size.substring(index); // "L"
|
||||
|
||||
ThreeDDetail threeDDetail = new ThreeDDetail();
|
||||
threeDDetail.setName(zipFileName);
|
||||
String url = "aida-threed/female/zip/" + zipFileName;
|
||||
threeDDetail.setGender("female");
|
||||
threeDDetail.setSizeType(prefix);
|
||||
threeDDetail.setSize(suffix);
|
||||
threeDDetail.setUrl(url);
|
||||
threeDDetailMapper.insert(threeDDetail);
|
||||
minioUtil.upload(url, file);
|
||||
|
||||
QueryWrapper<ThreeDSimple> qw = new QueryWrapper<>();
|
||||
qw.lambda().eq(ThreeDSimple::getName, zipName);
|
||||
qw.lambda().eq(ThreeDSimple::getGender, "female");
|
||||
List<ThreeDSimple> threeDSimples = threeDSimpleMapper.selectList(qw);
|
||||
|
||||
if (CollectionUtils.isEmpty(threeDSimples)) {
|
||||
ThreeDSimple threeDSimple = new ThreeDSimple();
|
||||
threeDSimple.setName(zipName);
|
||||
threeDSimple.setGender("female");
|
||||
|
||||
String glbPath = "C:\\workspace\\3D\\3D虚拟 1-7\\3D服装整理\\female\\" + zipName + "\\" +"亚码L";
|
||||
File glbFolder = new File(glbPath);
|
||||
|
||||
// 查找 .glb 文件
|
||||
if (glbFolder.exists() && glbFolder.isDirectory()) {
|
||||
File[] glbFiles = glbFolder.listFiles((dir, name) -> name.toLowerCase().endsWith(".glb"));
|
||||
if (glbFiles != null && glbFiles.length > 0) {
|
||||
for (File glbFile : glbFiles) {
|
||||
String name = glbFile.getName();
|
||||
String glbUrl = "aida-threed/female/glb/" + name;
|
||||
threeDSimple.setUrl(glbUrl);
|
||||
minioUtil.upload(glbUrl, glbFile);
|
||||
}
|
||||
} else {
|
||||
System.out.println("未找到 GLB 文件。" + glbFolder);
|
||||
}
|
||||
} else {
|
||||
System.out.println("GLB 文件夹不存在: " + glbPath);
|
||||
}
|
||||
threeDSimpleMapper.insert(threeDSimple);
|
||||
threeDDetail.setThreeDSimpleId(threeDSimple.getId());
|
||||
threeDDetailMapper.updateById(threeDDetail);
|
||||
}else {
|
||||
Long id = threeDSimples.get(0).getId();
|
||||
threeDDetail.setThreeDSimpleId(id);
|
||||
threeDDetailMapper.updateById(threeDDetail);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
} else {
|
||||
System.out.println("未找到 ZIP 文件。");
|
||||
}
|
||||
log.info("aaa");
|
||||
} else {
|
||||
System.out.println("文件夹不存在或不是一个目录。");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -570,6 +570,36 @@ public class MinioUtil {
|
||||
throw new BusinessException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public void upload(String url, File file) {
|
||||
try {
|
||||
// 分割桶名和对象路径
|
||||
int firstSlashIndex = url.indexOf("/");
|
||||
if (firstSlashIndex == -1) {
|
||||
throw new IllegalArgumentException("URL 格式不正确,无法解析桶名和对象路径");
|
||||
}
|
||||
String bucketName = url.substring(0, firstSlashIndex);
|
||||
String objectName = url.substring(firstSlashIndex + 1);
|
||||
|
||||
// 读取文件流
|
||||
try (FileInputStream fileInputStream = new FileInputStream(file)) {
|
||||
// 上传到 MinIO
|
||||
minioClient.putObject(
|
||||
PutObjectArgs.builder()
|
||||
.bucket(bucketName)
|
||||
.object(objectName)
|
||||
.stream(fileInputStream, file.length(), -1)
|
||||
.contentType("application/zip")
|
||||
.build()
|
||||
);
|
||||
System.out.println("文件上传成功: " + url);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
System.err.println("文件上传失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user