Skip to content

Commit fa03cb0

Browse files
committed
fix: fixed an issue where files inside folders could not be previewed
1 parent 64e9094 commit fa03cb0

4 files changed

Lines changed: 18 additions & 11 deletions

File tree

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

Lines changed: 7 additions & 5 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);
@@ -229,7 +231,7 @@ public DatasetFile getDatasetFile(Dataset dataset, String fileId) {
229231
@Transactional
230232
public void deleteDatasetFile(String datasetId, String fileId) {
231233
Dataset dataset = datasetRepository.getById(datasetId);
232-
DatasetFile file = getDatasetFile(dataset, fileId);
234+
DatasetFile file = getDatasetFile(dataset, fileId, null);
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: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public ResponseEntity<Response<DatasetFileResponse>> getDatasetFileById(
6868
@PathVariable("fileId") String fileId) {
6969
try {
7070
Dataset dataset = datasetApplicationService.getDataset(datasetId);
71-
DatasetFile datasetFile = datasetFileApplicationService.getDatasetFile(dataset, fileId);
71+
DatasetFile datasetFile = datasetFileApplicationService.getDatasetFile(dataset, fileId, null);
7272
return ResponseEntity.ok(Response.ok(DatasetConverter.INSTANCE.convertToResponse(datasetFile)));
7373
} catch (IllegalArgumentException e) {
7474
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(Response.error(SystemErrorCode.UNKNOWN_ERROR, null));
@@ -90,10 +90,12 @@ public ResponseEntity<Response<Void>> deleteDatasetFile(
9090
@IgnoreResponseWrap
9191
@GetMapping(value = "/{fileId}/download", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE + ";charset=UTF-8")
9292
public ResponseEntity<Resource> downloadDatasetFileById(@PathVariable("datasetId") String datasetId,
93-
@PathVariable("fileId") String fileId) {
93+
@PathVariable("fileId") String fileId,
94+
@RequestParam(value = "prefix", required = false, defaultValue = "") String prefix) {
9495
try {
96+
log.info("downloadDatasetFileById datasetId:{}, fileId:{}, prefix:{}", datasetId, fileId, prefix);
9597
Dataset dataset = datasetApplicationService.getDataset(datasetId);
96-
DatasetFile datasetFile = datasetFileApplicationService.getDatasetFile(dataset, fileId);
98+
DatasetFile datasetFile = datasetFileApplicationService.getDatasetFile(dataset, fileId, prefix);
9799
Resource resource = datasetFileApplicationService.downloadFile(datasetFile);
98100

99101
return ResponseEntity.ok()

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

Lines changed: 4 additions & 2 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 个文件`,
@@ -117,7 +118,8 @@ export function useFilesOperation(dataset: Dataset) {
117118
setPreviewFileDetail(detail);
118119

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

122124
if (image) {
123125
setPreviewUrl(blobUrl);

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,13 +108,14 @@ export function renameDirectoryUsingPut(
108108

109109
export function downloadFileByIdUsingGet(
110110
id: string | number,
111+
prefix: string,
111112
fileId: string | number,
112113
fileName: string,
113114
action: string = "download"
114115
) {
115116
return download(
116117
`/api/data-management/datasets/${id}/files/${fileId}/download`,
117-
null,
118+
{ prefix: prefix },
118119
fileName,
119120
action
120121
);

0 commit comments

Comments
 (0)