diff --git a/backend/services/project-management/src/main/java/io/metersphere/project/service/FileMetadataService.java b/backend/services/project-management/src/main/java/io/metersphere/project/service/FileMetadataService.java index 227223a961..e1d35d1dee 100644 --- a/backend/services/project-management/src/main/java/io/metersphere/project/service/FileMetadataService.java +++ b/backend/services/project-management/src/main/java/io/metersphere/project/service/FileMetadataService.java @@ -216,7 +216,9 @@ public class FileMetadataService { FileRequest uploadFileRequest = new FileRequest(); uploadFileRequest.setFileName(fileMetadata.getId()); - uploadFileRequest.setProjectId(fileMetadata.getProjectId()); + uploadFileRequest.setMainFolder(FileRequest.MAIN_FOLDER_PROJECT); + uploadFileRequest.setAppName(FileRequest.APP_NAME_FILE_MANAGEMENT); + uploadFileRequest.setSourceGroupFolder(fileMetadata.getProjectId()); uploadFileRequest.setStorage(StorageType.MINIO.name()); FileRepository minio = CommonBeanFactory.getBean(MinioRepository.class); @@ -280,7 +282,9 @@ public class FileMetadataService { private String uploadFile(FileMetadata fileMetadata, MultipartFile file) throws Exception { FileRequest uploadFileRequest = new FileRequest(); uploadFileRequest.setFileName(fileMetadata.getId()); - uploadFileRequest.setProjectId(fileMetadata.getProjectId()); + uploadFileRequest.setSourceGroupFolder(fileMetadata.getProjectId()); + uploadFileRequest.setMainFolder(FileRequest.MAIN_FOLDER_PROJECT); + uploadFileRequest.setAppName(FileRequest.APP_NAME_FILE_MANAGEMENT); uploadFileRequest.setStorage(StorageType.MINIO.name()); return fileService.upload(file, uploadFileRequest); } @@ -320,7 +324,9 @@ public class FileMetadataService { } FileRequest fileRequest = new FileRequest(); fileRequest.setFileName(fileMetadata.getId()); - fileRequest.setProjectId(fileMetadata.getProjectId()); + fileRequest.setSourceGroupFolder(fileMetadata.getProjectId()); + fileRequest.setMainFolder(FileRequest.MAIN_FOLDER_PROJECT); + fileRequest.setAppName(FileRequest.APP_NAME_FILE_MANAGEMENT); fileRequest.setStorage(fileMetadata.getStorage()); //获取git文件下载 diff --git a/backend/services/system-setting/src/main/java/io/metersphere/system/file/FileRequest.java b/backend/services/system-setting/src/main/java/io/metersphere/system/file/FileRequest.java index 8b4f428d3b..82c651122b 100644 --- a/backend/services/system-setting/src/main/java/io/metersphere/system/file/FileRequest.java +++ b/backend/services/system-setting/src/main/java/io/metersphere/system/file/FileRequest.java @@ -7,7 +7,30 @@ import lombok.Data; @Data public class FileRequest { - // 项目id + public static final String MAIN_FOLDER_SYSTEM = "system"; + public static final String MAIN_FOLDER_PROJECT = "project"; + public static final String MAIN_FOLDER_ORGANIZATION = "organization"; + + public static final String APP_NAME_FILE_MANAGEMENT = "fileManagement"; + + //主文件夹 取值:system、project、organization + private String mainFolder; + + /* + 资源所属组目录。 + 当mainFolder为system时,这里可以是plugin(存放插件) + 当mainFolder为project时,这里可以是项目ID + 可为空 + */ + private String sourceGroupFolder; + + /* + 可以为空 + 取值参照:fileManagement、api + */ + private String appName; + + //项目ID private String projectId; // 存储类型 diff --git a/backend/services/system-setting/src/main/java/io/metersphere/system/file/MinioRepository.java b/backend/services/system-setting/src/main/java/io/metersphere/system/file/MinioRepository.java index 68ef142bef..6d2fd810b1 100644 --- a/backend/services/system-setting/src/main/java/io/metersphere/system/file/MinioRepository.java +++ b/backend/services/system-setting/src/main/java/io/metersphere/system/file/MinioRepository.java @@ -24,12 +24,16 @@ public class MinioRepository implements FileRepository { private static final int BUFFER_SIZE = 8192; private String getPath(FileRequest request) { + String mainFolder = StringUtils.isBlank(request.getMainFolder()) ? "default" : request.getMainFolder() + "/"; + String appName = StringUtils.isBlank(request.getAppName()) ? StringUtils.EMPTY : (request.getAppName() + "/"); + //如果sourceGroupFolder为空, 取projectId + String sourceGroupFolder = StringUtils.isNotBlank(request.getSourceGroupFolder()) ? (request.getSourceGroupFolder() + "/") : + (StringUtils.isNotBlank(request.getProjectId()) ? (request.getProjectId() + "/") : StringUtils.EMPTY); + String resourceId = StringUtils.isBlank(request.getResourceId()) ? StringUtils.EMPTY : (request.getResourceId() + "/"); + // 文件存储路径 return StringUtils.join( - request.getProjectId(), - "/", - StringUtils.isNotBlank(request.getResourceId()) ? request.getResourceId() + "/" : StringUtils.EMPTY, - request.getFileName()); + "metersphere/", mainFolder, sourceGroupFolder, appName, resourceId, request.getFileName()); } @Override