1.修改创建文件夹和上传文件的bug。

This commit is contained in:
sxlong 2024-11-29 11:27:56 +08:00
parent 143389f52b
commit 9ed6a64a9e
5 changed files with 127 additions and 105 deletions

View File

@ -38,3 +38,7 @@ data.export.cache.dir=export
#导入数据时文件的缓存文件夹名称 #导入数据时文件的缓存文件夹名称
data.import.cache.dir=import data.import.cache.dir=import
file.encode.passwd=adknfhkj87654knd file.encode.passwd=adknfhkj87654knd
#数据类型中的文件类型为file
data.type.file=file
#数据类型中的文件夹类型为folder
data.type.folder=folder

View File

@ -34,7 +34,7 @@ public interface EDDataService {
* @param edDataInfo * @param edDataInfo
* @return * @return
*/ */
Boolean createDataInfo(EDDataInfo edDataInfo); Boolean createDataInfo(EDDataInfo edDataInfo) throws FileNotFoundException;
/** /**
* 获取文件信息列表 * 获取文件信息列表
@ -69,7 +69,7 @@ public interface EDDataService {
* @param parames * @param parames
* @return * @return
*/ */
Boolean uploadFile(EDDataParams parames); Boolean uploadFile(EDDataParams parames) throws FileNotFoundException;
/** /**
* 文件下载 * 文件下载

View File

@ -71,6 +71,11 @@ public class EDDataServiceImpl implements EDDataService {
private String exportCacheDir; private String exportCacheDir;
@Value("${file.encode.passwd}") @Value("${file.encode.passwd}")
private String encodePasswd; private String encodePasswd;
@Value("${data.type.file}")
private String dataTypeFile;
@Value("${data.type.folder}")
private String dataTypeFolder;
// 文件夹名称分隔符 // 文件夹名称分隔符
private static final String FOLDER_NAME_SEPARATOR = "_"; private static final String FOLDER_NAME_SEPARATOR = "_";
@ -140,15 +145,14 @@ public class EDDataServiceImpl implements EDDataService {
* @param edDataInfo * @param edDataInfo
* @return * @return
*/ */
public Boolean createDataInfo(EDDataInfo edDataInfo) public Boolean createDataInfo(EDDataInfo edDataInfo) throws FileNotFoundException
{ {
// 获取上级目录的名称 // 获取上级目录的名称
Category categoryParent = new Category(); Category categoryParent = new Category();
categoryParent.setCategoryId(edDataInfo.getCategoryId()); categoryParent.setCategoryId(edDataInfo.getCategoryId());
List<Category> categoryParentList = categoryRepository.selectCategories(categoryParent); List<Category> categoryParentList = categoryRepository.selectCategories(categoryParent);
if(categoryParentList.size() < 1) if(categoryParentList.size() < 1) {
{ throw new FileNotFoundException("上级文件夹不存在");
return Boolean.FALSE;
} }
else else
{ {
@ -165,8 +169,8 @@ public class EDDataServiceImpl implements EDDataService {
List<EDDataInfo> childFileInfoList = edDataRepository.getDataInfoList(folderParames); List<EDDataInfo> childFileInfoList = edDataRepository.getDataInfoList(folderParames);
for(EDDataInfo fileInfo : childFileInfoList) for(EDDataInfo fileInfo : childFileInfoList)
{ {
if(fileInfo.getDataName() == edDataInfo.getDataName()){ if(fileInfo.getDataName().equals(edDataInfo.getDataName())){
return Boolean.FALSE; throw new FileNotFoundException("文件夹已存在");
} }
} }
@ -243,7 +247,7 @@ public class EDDataServiceImpl implements EDDataService {
// 修改文件夹 // 修改文件夹
edDataRepository.updateFileInfo(parames); edDataRepository.updateFileInfo(parames);
// 修改文件夹中的文件 // 修改文件夹中的文件
if(edDataInfo.getDataType().equals("folder") && parames.getEffectFlag() != null) { if(edDataInfo.getDataType().equals(dataTypeFolder) && parames.getEffectFlag() != null) {
EDDataParams paramesChild = new EDDataParams(); EDDataParams paramesChild = new EDDataParams();
paramesChild.setParentId(edDataInfo.getDataId()); paramesChild.setParentId(edDataInfo.getDataId());
paramesChild.setEffectFlag(parames.getEffectFlag()); paramesChild.setEffectFlag(parames.getEffectFlag());
@ -265,12 +269,12 @@ public class EDDataServiceImpl implements EDDataService {
List<EDDataInfo> edDataInfoList = edDataRepository.getDataInfoList(parames); List<EDDataInfo> edDataInfoList = edDataRepository.getDataInfoList(parames);
parames.setDataId(null); parames.setDataId(null);
for (EDDataInfo edDataInfo : edDataInfoList) { for (EDDataInfo edDataInfo : edDataInfoList) {
if(edDataInfo.getDataType().equals("folder")) if(edDataInfo.getDataType().equals(dataTypeFolder))
{ {
parames.setParentId(edDataInfo.getDataId()); parames.setParentId(edDataInfo.getDataId());
childFileCount += getChildFileCount(parames); childFileCount += getChildFileCount(parames);
} }
else if(edDataInfo.getDataType().equals("file")) else if(edDataInfo.getDataType().equals(dataTypeFile))
{ {
++childFileCount; ++childFileCount;
} }
@ -284,7 +288,7 @@ public class EDDataServiceImpl implements EDDataService {
* @param parames * @param parames
* @return * @return
*/ */
public Boolean uploadFile(EDDataParams parames) public Boolean uploadFile(EDDataParams parames) throws FileNotFoundException
{ {
// 获取目录编码ID // 获取目录编码ID
@ -295,7 +299,7 @@ public class EDDataServiceImpl implements EDDataService {
// 检查文件是否为空 // 检查文件是否为空
if (fileInput == null || fileInput.isEmpty()) { if (fileInput == null || fileInput.isEmpty()) {
return Boolean.FALSE; throw new FileNotFoundException("上传的文件为空");
} }
// 获取文件名 // 获取文件名
@ -309,6 +313,17 @@ public class EDDataServiceImpl implements EDDataService {
fileName = fileFullName.substring(fileFullName.lastIndexOf(".")); fileName = fileFullName.substring(fileFullName.lastIndexOf("."));
} }
// 判断文件名称是否存在
EDDataParams folderParames = new EDDataParams();
folderParames.setParentId(categoryId);
List<EDDataInfo> childFileInfoList = edDataRepository.getDataInfoList(folderParames);
for(EDDataInfo fileInfo : childFileInfoList)
{
if(fileInfo.getDataName().equals(fileFullName)){
throw new FileNotFoundException("上传的文件已存在");
}
}
String dataStoragePath = getDataStoragePath(); String dataStoragePath = getDataStoragePath();
if (!FileUtil.exist(dataStoragePath)){ if (!FileUtil.exist(dataStoragePath)){
FileUtil.mkdir(dataStoragePath); FileUtil.mkdir(dataStoragePath);
@ -319,91 +334,88 @@ public class EDDataServiceImpl implements EDDataService {
// 将文件数据信息写到数据库 // 将文件数据信息写到数据库
EDDataInfo edDataInfo = new EDDataInfo(); EDDataInfo edDataInfo = new EDDataInfo();
{
// 临时数据设置
if (Boolean.TRUE) {
if (parames.getUserId() == null || parames.getUserId().isEmpty()) parames.setUserId(IdWorker.getSnowFlakeIdString());
if (parames.getUserName() == null || parames.getUserName().isEmpty()) parames.setUserName("user");
}
// 创建新文件数据
edDataInfo.setCreator(parames.getUserId());
edDataInfo.setCreatorName(parames.getUserName());
edDataInfo.setModifier(parames.getUserId());
edDataInfo.setModifierName(parames.getUserName());
edDataInfo.setCategoryId(parames.getParentId());
edDataInfo.setDataName(fileFullName);
edDataInfo.setNote(parames.getNote());
edDataInfo.setFileType(fileType);
edDataInfo.setGmtBatchUpload(parames.getGmtBatchUpload());
edDataInfo.setDataId(IdWorker.getSnowFlakeIdString()); // 创建新文件数据
edDataInfo.setDataNo(edDataInfo.getDataId()); edDataInfo.setCreator(parames.getUserId());
edDataInfo.setDataType("file"); edDataInfo.setCreatorName(parames.getUserName());
edDataInfo.setVersion("1.0.0"); edDataInfo.setModifier(parames.getUserId());
edDataInfo.setDataStatus("publish"); edDataInfo.setModifierName(parames.getUserName());
edDataInfo.setSaveStatus("saving"); edDataInfo.setCategoryId(parames.getParentId());
edDataInfo.setDataName(fileFullName);
edDataInfo.setNote(parames.getNote());
edDataInfo.setFileType(fileType);
edDataInfo.setGmtBatchUpload(parames.getGmtBatchUpload());
boolean isSuccess = edDataRepository.createDataInfo(edDataInfo); edDataInfo.setDataId(IdWorker.getSnowFlakeIdString());
} edDataInfo.setDataNo(edDataInfo.getDataId());
edDataInfo.setDataType(dataTypeFile);
edDataInfo.setVersion("1.0.0");
edDataInfo.setDataStatus("publish");
edDataInfo.setSaveStatus("saving");
boolean isSuccess = edDataRepository.createDataInfo(edDataInfo);
log.info("文件开始保存.");
// 保存文件数据 文件存储目录 // 保存文件数据 文件存储目录
{
// 文件保存目录路径
String fileSavePath = dataStoragePath + File.separator + filePathOfFolder;
String newFileName = edDataInfo.getDataId() + FOLDER_NAME_SEPARATOR + fileFullName;
if (!FileUtil.exist(fileSavePath)){
FileUtil.mkdir(fileSavePath);
}
String dataCachePath = getDataCachePath();
String uploadFileCachePath = dataCachePath + uploadCacheDir + FOLDER_NAME_SEPARATOR + getTimeStampString();
if (!FileUtil.exist(uploadFileCachePath)){
FileUtil.mkdir(uploadFileCachePath);
}
String fileCacheFullPath = uploadFileCachePath + File.separator + newFileName;
String fileSaveFullPath = fileSavePath + File.separator + fileFullName;
log.info("文件缓存路径为: " + fileCacheFullPath);
// 这里可以添加将文件保存到本地磁盘或其他存储介质的逻辑 // 文件保存目录路径
File saveFile = new File(fileCacheFullPath); String fileSavePath = dataStoragePath + File.separator + filePathOfFolder;
String newFileName = edDataInfo.getDataId() + FOLDER_NAME_SEPARATOR + fileFullName;
// 将文件保存到硬盘 if (!FileUtil.exist(fileSavePath)){
try { FileUtil.mkdir(fileSavePath);
fileInput.transferTo(saveFile); }
EDDataParams fileParames = new EDDataParams(); String dataCachePath = getDataCachePath();
fileParames.setDataId(edDataInfo.getDataId()); String uploadFileCachePath = dataCachePath + uploadCacheDir + FOLDER_NAME_SEPARATOR + getTimeStampString();
if(fileInput.getSize() == saveFile.length()) if (!FileUtil.exist(uploadFileCachePath)){
{ FileUtil.mkdir(uploadFileCachePath);
Path source = Paths.get(fileCacheFullPath); }
Path target = Paths.get(fileSaveFullPath);
Files.move(source, target); String fileCacheFullPath = uploadFileCachePath + File.separator + newFileName;
fileParames.setSaveStatus("success"); String fileSaveFullPath = fileSavePath + File.separator + fileFullName;
} log.info("文件缓存路径为: " + fileCacheFullPath);
else
{
saveFile.delete(); // 这里可以添加将文件保存到本地磁盘或其他存储介质的逻辑
fileParames.setSaveStatus("failure"); File saveFile = new File(fileCacheFullPath);
}
// 将文件保存到硬盘
boolean isSuccess = edDataRepository.updateFileInfo(fileParames); EDDataParams fileParames = new EDDataParams();
try {
FileUtil.del(uploadFileCachePath);//删除临时目录 fileInput.transferTo(saveFile);
log.info("文件保存成功: " + fileSaveFullPath);
fileParames.setDataId(edDataInfo.getDataId());
return Boolean.TRUE; if(fileInput.getSize() == saveFile.length())
{
} catch (IOException e) { Path source = Paths.get(fileCacheFullPath);
e.printStackTrace(); Path target = Paths.get(fileSaveFullPath);
} Files.move(source, target);
fileParames.setSaveStatus("success");
}
else
{
saveFile.delete();
fileParames.setSaveStatus("failure");
}
isSuccess = edDataRepository.updateFileInfo(fileParames);
FileUtil.del(uploadFileCachePath);//删除临时目录
log.info("文件保存成功: " + fileSaveFullPath);
return Boolean.TRUE;
} catch (IOException e) {
fileParames.setSaveStatus("failure");
edDataRepository.updateFileInfo(fileParames);
log.info("文件保存失败: " + fileSaveFullPath);
throw new FileNotFoundException(e.getMessage());
} }
return Boolean.FALSE;
} }
/** /**
@ -659,11 +671,11 @@ public class EDDataServiceImpl implements EDDataService {
&& !FileUtil.exist(fileStorageFullPath) && !FileUtil.exist(fileStorageFullPath)
) )
{ {
if(fileInfo.getDataType().equals("folder")) { if(fileInfo.getDataType().equals(dataTypeFolder)) {
if (!FileUtil.exist(fileStorageFullPath)) { if (!FileUtil.exist(fileStorageFullPath)) {
FileUtil.mkdir(fileStorageFullPath); FileUtil.mkdir(fileStorageFullPath);
} }
} else if(fileInfo.getDataType().equals("file")) { } else if(fileInfo.getDataType().equals(dataTypeFile)) {
Path source = Paths.get(importFileCacheFullPath); Path source = Paths.get(importFileCacheFullPath);
Path target = Paths.get(fileStorageFullPath); Path target = Paths.get(fileStorageFullPath);
FileUtil.move(source,target,true); FileUtil.move(source,target,true);

View File

@ -4,10 +4,11 @@ import electromagnetic.data.framework.share.model.BaseRequest;
import lombok.Data; import lombok.Data;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.Serializable;
import java.util.Date; import java.util.Date;
@Data @Data
public class EDDataRequest extends BaseRequest { public class EDDataRequest extends BaseRequest implements Serializable {
/** /**
* 当前页 * 当前页

View File

@ -55,6 +55,9 @@ public class EDDataFacadeImpl implements EDDataFacade {
@Value("${file.encode.passwd}") @Value("${file.encode.passwd}")
private String encodePasswd; private String encodePasswd;
@Value("${data.type.folder}")
private String dataTypeFolder;
private static final String UPLOAD_FILE_CHUNK_SUFFIX = ".part"; private static final String UPLOAD_FILE_CHUNK_SUFFIX = ".part";
@ -70,12 +73,6 @@ public class EDDataFacadeImpl implements EDDataFacade {
public ElectromagneticResult<Boolean> createFolder(EDDataRequest request) { public ElectromagneticResult<Boolean> createFolder(EDDataRequest request) {
EDDataInfo edDataInfo = EDDataMappers.INSTANCE.getEDDataInfo(request); EDDataInfo edDataInfo = EDDataMappers.INSTANCE.getEDDataInfo(request);
// 临时数据设置
if(Boolean.TRUE) {
if (request.getUserId() == null || request.getUserId().isEmpty()) request.setUserId(IdWorker.getSnowFlakeIdString());
if (request.getUserName() == null || request.getUserName().isEmpty()) request.setUserName("user");
}
edDataInfo.setCreator(request.getUserId()); edDataInfo.setCreator(request.getUserId());
edDataInfo.setCreatorName(request.getUserName()); edDataInfo.setCreatorName(request.getUserName());
edDataInfo.setModifier(request.getUserId()); edDataInfo.setModifier(request.getUserId());
@ -87,13 +84,17 @@ public class EDDataFacadeImpl implements EDDataFacade {
edDataInfo.setDataId(IdWorker.getSnowFlakeIdString()); edDataInfo.setDataId(IdWorker.getSnowFlakeIdString());
edDataInfo.setDataNo(edDataInfo.getDataId()); edDataInfo.setDataNo(edDataInfo.getDataId());
edDataInfo.setDataType("folder"); edDataInfo.setDataType(dataTypeFolder);
edDataInfo.setVersion("1.0.0"); edDataInfo.setVersion("1.0.0");
edDataInfo.setDataStatus("publish"); edDataInfo.setDataStatus("publish");
edDataInfo.setSaveStatus("success"); edDataInfo.setSaveStatus("success");
Boolean isSuccess = edDataService.createDataInfo(edDataInfo); try {
return ElectromagneticResultUtil.success(isSuccess); return ElectromagneticResultUtil.success(edDataService.createDataInfo(edDataInfo));
} catch (FileNotFoundException e) {
log.error("创建文件夹失败。。。", e);
return ElectromagneticResultUtil.fail("500", e.getMessage());
}
} }
@ -125,8 +126,8 @@ public class EDDataFacadeImpl implements EDDataFacade {
*/ */
public ElectromagneticResult<Boolean> updateFileInfo(EDDataRequest request) public ElectromagneticResult<Boolean> updateFileInfo(EDDataRequest request)
{ {
EDDataParams parames= EDDataMappers.INSTANCE.getEDDataParames(request);
try { try {
EDDataParams parames= EDDataMappers.INSTANCE.getEDDataParames(request);
return ElectromagneticResultUtil.success(edDataService.updateFileInfo(parames)); return ElectromagneticResultUtil.success(edDataService.updateFileInfo(parames));
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
log.error("文件信息更新失败。。。", e); log.error("文件信息更新失败。。。", e);
@ -159,9 +160,13 @@ public class EDDataFacadeImpl implements EDDataFacade {
*/ */
public ElectromagneticResult<Boolean> uploadFile(EDDataRequest request) public ElectromagneticResult<Boolean> uploadFile(EDDataRequest request)
{ {
EDDataParams parames= EDDataMappers.INSTANCE.getEDDataParames(request); try {
Boolean isSuccess = edDataService.uploadFile(parames); EDDataParams parames= EDDataMappers.INSTANCE.getEDDataParames(request);
return ElectromagneticResultUtil.success(isSuccess); return ElectromagneticResultUtil.success(edDataService.uploadFile(parames));
} catch (FileNotFoundException e) {
log.error("上传文件失败。。。", e);
return ElectromagneticResultUtil.fail("500", e.getMessage());
}
} }
/** /**