feat(file-preview): 增加PDF文件预览功能并优化预览逻辑

- 引入统一的文件预览工具函数和类型定义
- 添加PDF文件类型的识别和预览支持
- 使用iframe实现PDF文件在线预览
- 重构文件预览逻辑,统一处理不同文件类型的预览
- 优化文本内容预览的长度截取机制
- 更新预览按钮加载状态显示
- 统一预览窗口的最大高度配置
- 修改API调用路径为专门的预览接口
This commit is contained in:
2026-01-30 17:32:36 +08:00
parent bd37858ccc
commit 6dfed934a5
5 changed files with 82 additions and 57 deletions

View File

@@ -4,7 +4,12 @@ import type {
} from "@/pages/DataManagement/dataset.model";
import { App } from "antd";
import { useState } from "react";
import { PREVIEW_TEXT_MAX_LENGTH, resolvePreviewFileType, truncatePreviewText } from "@/utils/filePreview";
import {
PREVIEW_TEXT_MAX_LENGTH,
resolvePreviewFileType,
truncatePreviewText,
type PreviewFileType,
} from "@/utils/filePreview";
import {
deleteDatasetFileUsingDelete,
downloadFileByIdUsingGet,
@@ -35,7 +40,7 @@ export function useFilesOperation(dataset: Dataset) {
const [previewVisible, setPreviewVisible] = useState(false);
const [previewContent, setPreviewContent] = useState("");
const [previewFileName, setPreviewFileName] = useState("");
const [previewFileType, setPreviewFileType] = useState<"text" | "image" | "video" | "audio">("text");
const [previewFileType, setPreviewFileType] = useState<PreviewFileType>("text");
const [previewMediaUrl, setPreviewMediaUrl] = useState("");
const [previewLoading, setPreviewLoading] = useState(false);
@@ -111,7 +116,7 @@ export function useFilesOperation(dataset: Dataset) {
return;
}
const fileUrl = `/api/data-management/datasets/${datasetId}/files/${file.id}/download`;
const previewUrl = `/api/data-management/datasets/${datasetId}/files/${file.id}/preview`;
setPreviewFileName(file.fileName);
setPreviewFileType(fileType);
setPreviewContent("");
@@ -120,7 +125,7 @@ export function useFilesOperation(dataset: Dataset) {
if (fileType === "text") {
setPreviewLoading(true);
try {
const response = await fetch(fileUrl);
const response = await fetch(previewUrl);
if (!response.ok) {
throw new Error("下载失败");
}
@@ -136,7 +141,7 @@ export function useFilesOperation(dataset: Dataset) {
return;
}
setPreviewMediaUrl(fileUrl);
setPreviewMediaUrl(previewUrl);
setPreviewVisible(true);
};