Skip to content

Commit 0fd98a5

Browse files
authored
fixed issues where files inside folders could not be previewed and deleted (#303)
* fix: fixed an issue where files inside folders could not be previewed * fix: fixed an issue where files inside folders could not be deleted
1 parent 64e9094 commit 0fd98a5

File tree

5 files changed

+36
-23
lines changed

5 files changed

+36
-23
lines changed

backend/services/data-management-service/src/main/java/com/datamate/datamanagement/application/DatasetFileApplicationService.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
3838
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
3939
import org.apache.commons.io.IOUtils;
40+
import org.apache.commons.lang3.StringUtils;
4041
import org.springframework.beans.factory.annotation.Autowired;
4142
import org.springframework.beans.factory.annotation.Value;
4243
import org.springframework.core.io.Resource;
@@ -203,14 +204,15 @@ private DatasetFile getDatasetFile(Path path, Map<String, DatasetFile> datasetFi
203204
* 获取文件详情
204205
*/
205206
@Transactional(readOnly = true)
206-
public DatasetFile getDatasetFile(Dataset dataset, String fileId) {
207-
if (dataset != null && !CommonUtils.isUUID(fileId) && !fileId.startsWith(".")) {
207+
public DatasetFile getDatasetFile(Dataset dataset, String fileId, String prefix) {
208+
prefix = StringUtils.isBlank(prefix) ? "" : prefix;
209+
if (dataset != null && !CommonUtils.isUUID(fileId) && !fileId.startsWith(".") && !prefix.startsWith(".")) {
208210
DatasetFile file = new DatasetFile();
209211
file.setId(fileId);
210212
file.setFileName(fileId);
211213
file.setDatasetId(dataset.getId());
212214
file.setFileSize(0L);
213-
file.setFilePath(dataset.getPath() + File.separator + fileId);
215+
file.setFilePath(dataset.getPath() + File.separator + prefix + fileId);
214216
return file;
215217
}
216218
DatasetFile file = datasetFileRepository.getById(fileId);
@@ -227,9 +229,9 @@ public DatasetFile getDatasetFile(Dataset dataset, String fileId) {
227229
* 删除文件
228230
*/
229231
@Transactional
230-
public void deleteDatasetFile(String datasetId, String fileId) {
232+
public void deleteDatasetFile(String datasetId, String fileId, String prefix) {
231233
Dataset dataset = datasetRepository.getById(datasetId);
232-
DatasetFile file = getDatasetFile(dataset, fileId);
234+
DatasetFile file = getDatasetFile(dataset, fileId, prefix);
233235
dataset.setFiles(new ArrayList<>(Collections.singleton(file)));
234236
datasetFileRepository.removeById(fileId);
235237
if (CommonUtils.isUUID(fileId)) {
@@ -655,7 +657,7 @@ public void renameFile(String datasetId, String fileId, RenameFileRequest reques
655657
throw BusinessException.of(DataManagementErrorCode.DATASET_NOT_FOUND);
656658
}
657659

658-
DatasetFile file = getDatasetFile(dataset, fileId);
660+
DatasetFile file = getDatasetFile(dataset, fileId, null);
659661
String newName = Optional.ofNullable(request.getNewName()).orElse("").trim();
660662
if (newName.isEmpty()) {
661663
throw BusinessException.of(CommonErrorCode.PARAM_ERROR);

backend/services/data-management-service/src/main/java/com/datamate/datamanagement/interfaces/rest/DatasetFileController.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,11 @@ public Response<PagedResponse<DatasetFile>> getDatasetFiles(
6565
@GetMapping("/{fileId}")
6666
public ResponseEntity<Response<DatasetFileResponse>> getDatasetFileById(
6767
@PathVariable("datasetId") String datasetId,
68-
@PathVariable("fileId") String fileId) {
68+
@PathVariable("fileId") String fileId,
69+
@RequestParam(value = "prefix", required = false, defaultValue = "") String prefix) {
6970
try {
7071
Dataset dataset = datasetApplicationService.getDataset(datasetId);
71-
DatasetFile datasetFile = datasetFileApplicationService.getDatasetFile(dataset, fileId);
72+
DatasetFile datasetFile = datasetFileApplicationService.getDatasetFile(dataset, fileId, prefix);
7273
return ResponseEntity.ok(Response.ok(DatasetConverter.INSTANCE.convertToResponse(datasetFile)));
7374
} catch (IllegalArgumentException e) {
7475
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(Response.error(SystemErrorCode.UNKNOWN_ERROR, null));
@@ -78,9 +79,10 @@ public ResponseEntity<Response<DatasetFileResponse>> getDatasetFileById(
7879
@DeleteMapping("/{fileId}")
7980
public ResponseEntity<Response<Void>> deleteDatasetFile(
8081
@PathVariable("datasetId") String datasetId,
81-
@PathVariable("fileId") String fileId) {
82+
@PathVariable("fileId") String fileId,
83+
@RequestParam(value = "prefix", required = false, defaultValue = "") String prefix) {
8284
try {
83-
datasetFileApplicationService.deleteDatasetFile(datasetId, fileId);
85+
datasetFileApplicationService.deleteDatasetFile(datasetId, fileId, prefix);
8486
return ResponseEntity.ok().build();
8587
} catch (IllegalArgumentException e) {
8688
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(Response.error(SystemErrorCode.UNKNOWN_ERROR, null));
@@ -90,10 +92,12 @@ public ResponseEntity<Response<Void>> deleteDatasetFile(
9092
@IgnoreResponseWrap
9193
@GetMapping(value = "/{fileId}/download", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE + ";charset=UTF-8")
9294
public ResponseEntity<Resource> downloadDatasetFileById(@PathVariable("datasetId") String datasetId,
93-
@PathVariable("fileId") String fileId) {
95+
@PathVariable("fileId") String fileId,
96+
@RequestParam(value = "prefix", required = false, defaultValue = "") String prefix) {
9497
try {
98+
log.info("downloadDatasetFileById datasetId:{}, fileId:{}, prefix:{}", datasetId, fileId, prefix);
9599
Dataset dataset = datasetApplicationService.getDataset(datasetId);
96-
DatasetFile datasetFile = datasetFileApplicationService.getDatasetFile(dataset, fileId);
100+
DatasetFile datasetFile = datasetFileApplicationService.getDatasetFile(dataset, fileId, prefix);
97101
Resource resource = datasetFileApplicationService.downloadFile(datasetFile);
98102

99103
return ResponseEntity.ok()

frontend/src/pages/DataManagement/Detail/useFilesOperation.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,8 @@ export function useFilesOperation(dataset: Dataset) {
8484

8585
const handleDownloadFile = async (file: DatasetFile) => {
8686
// 实际导出逻辑
87-
await downloadFileByIdUsingGet(dataset.id, file.id, file.fileName);
87+
const prefix = pagination.prefix || "";
88+
await downloadFileByIdUsingGet(dataset.id, prefix, file.id, file.fileName);
8889
// 假设导出成功
8990
message.success({
9091
content: `已导出 1 个文件`,
@@ -112,12 +113,13 @@ export function useFilesOperation(dataset: Dataset) {
112113
setPreviewFileDetail(undefined);
113114
try {
114115
// 获取文件元信息(来自 t_dm_dataset_files)
115-
const detailRes: any = await getDatasetFileByIdUsingGet(datasetId, file.id);
116+
const prefix = pagination.prefix || "";
117+
const detailRes: any = await getDatasetFileByIdUsingGet(datasetId, file.id, prefix);
116118
const detail = detailRes?.data || detailRes;
117119
setPreviewFileDetail(detail);
118120

119121
const image = isImageFile(detail?.fileName || file.fileName, detail?.fileType);
120-
const { blob, blobUrl } = await downloadFileByIdUsingGet(datasetId, file.id, file.fileName, "preview");
122+
const { blob, blobUrl } = await downloadFileByIdUsingGet(datasetId, prefix, file.id, file.fileName, "preview");
121123

122124
if (image) {
123125
setPreviewUrl(blobUrl);
@@ -134,7 +136,8 @@ export function useFilesOperation(dataset: Dataset) {
134136

135137
const handleDeleteFile = async (file) => {
136138
try {
137-
await deleteDatasetFileUsingDelete(dataset.id, file.id);
139+
const prefix = pagination.prefix || "";
140+
await deleteDatasetFileUsingDelete(dataset.id, file.id, prefix);
138141
fetchFiles(); // 刷新文件列表
139142
message.success({ content: `文件 ${file.fileName} 已删除` });
140143
} catch (error) {
@@ -189,7 +192,7 @@ export function useFilesOperation(dataset: Dataset) {
189192
// 先删除文件
190193
for (const file of files) {
191194
try {
192-
await deleteDatasetFileUsingDelete(dataset.id, file.id);
195+
await deleteDatasetFileUsingDelete(dataset.id, file.id, directoryPath);
193196
} catch (e) {
194197
console.error("删除文件失败", file, e);
195198
}

frontend/src/pages/DataManagement/dataset.api.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,11 @@ export function queryDatasetFilesUsingGet(id: string | number, params?: any) {
5757
// 根据ID获取单个数据集文件详情
5858
export function getDatasetFileByIdUsingGet(
5959
datasetId: string | number,
60-
fileId: string | number
60+
fileId: string | number,
61+
prefix: string
6162
) {
6263
return get(
63-
`/api/data-management/datasets/${datasetId}/files/${fileId}`
64+
`/api/data-management/datasets/${datasetId}/files/${fileId}`, { prefix: prefix}
6465
);
6566
}
6667

@@ -108,13 +109,14 @@ export function renameDirectoryUsingPut(
108109

109110
export function downloadFileByIdUsingGet(
110111
id: string | number,
112+
prefix: string,
111113
fileId: string | number,
112114
fileName: string,
113115
action: string = "download"
114116
) {
115117
return download(
116118
`/api/data-management/datasets/${id}/files/${fileId}/download`,
117-
null,
119+
{ prefix: prefix },
118120
fileName,
119121
action
120122
);
@@ -123,9 +125,10 @@ export function downloadFileByIdUsingGet(
123125
// 删除数据集文件
124126
export function deleteDatasetFileUsingDelete(
125127
datasetId: string | number,
126-
fileId: string | number
128+
fileId: string | number,
129+
prefix: string
127130
) {
128-
return del(`/api/data-management/datasets/${datasetId}/files/${fileId}`);
131+
return del(`/api/data-management/datasets/${datasetId}/files/${fileId}`, { prefix: prefix });
129132
}
130133

131134
// 重命名数据集文件(仅修改主名称,后缀保持不变)

frontend/src/utils/request.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,8 @@ class Request {
368368
const isQueryParams =
369369
Object.keys(params).length === 1 &&
370370
(Object.prototype.hasOwnProperty.call(params, "id") ||
371-
Object.prototype.hasOwnProperty.call(params, "ids"));
371+
Object.prototype.hasOwnProperty.call(params, "ids") ||
372+
Object.prototype.hasOwnProperty.call(params, "prefix"));
372373

373374
if (isQueryParams) {
374375
fullURL = this.buildURL(url, params);

0 commit comments

Comments
 (0)