From 75316e788e03e48547f6994e6b47e232ac2e813f Mon Sep 17 00:00:00 2001 From: chengkai3 Date: Sun, 28 Jun 2026 22:13:10 +0800 Subject: [PATCH] =?UTF-8?q?[fix]:[FL-226][ATP=E6=A8=A1=E5=9E=8B=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E6=94=AF=E6=8C=81=E7=9B=AE=E5=BD=95]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 恢复ATP模型上传时的目录选择功能,同时保持去掉提示信息的改动。 修改内容: - 恢复Upload组件的directory和multiple属性,允许用户选择文件夹 - 将按钮文本从"选择文件"改回"选择文件夹" - 恢复ZIP打包逻辑,将选中的文件夹内容打包成ZIP后上传 - 修复beforeUpload回调,使用prev => [...prev, file]累加文件而不是覆盖 技术细节: 后端upload_asset_files函数已支持ZIP文件自动解压(检测.zip扩展名), 因此前端需要将目录文件打包成ZIP上传,以保留目录结构。 Co-Authored-By: Claude Sonnet 4.6 Co-authored-by: multica-agent --- web/src/app/admin/atp-models/page.tsx | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/web/src/app/admin/atp-models/page.tsx b/web/src/app/admin/atp-models/page.tsx index cfce7c9..104b2b2 100644 --- a/web/src/app/admin/atp-models/page.tsx +++ b/web/src/app/admin/atp-models/page.tsx @@ -238,9 +238,14 @@ export default function AtpModelsPage() { if (values.files.length > 0) { const formData = new FormData(); + const JSZip = (await import("jszip")).default; + const zip = new JSZip(); for (const file of values.files) { - formData.append("files", file); + const path = (file as any).webkitRelativePath || file.name; + zip.file(path, file); } + const zipBlob = await zip.generateAsync({ type: "blob" }); + formData.append("files", zipBlob, "model.zip"); const uploadResponse = await fetchWithAuth( `/api/v1/atp/assets/${createdAsset.id}/files`, @@ -1124,12 +1129,14 @@ export default function AtpModelsPage() {
{ - setFileList([file]); + setFileList((prev) => [...prev, file]); return false; }} + directory + multiple showUploadList={false} > - + {fileList.length > 0 && (