From c6e39984a58dc20a6dfabe4601f22a98dacee6a2 Mon Sep 17 00:00:00 2001 From: admin <572701190@qq.com> Date: Sun, 3 May 2026 00:22:34 +0800 Subject: [PATCH] avoid duplicate DICOM zip compression --- web_backend.py | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/web_backend.py b/web_backend.py index 32a5d1a..469a3d2 100644 --- a/web_backend.py +++ b/web_backend.py @@ -407,6 +407,40 @@ def zip_folder(source_dir, zip_path): return zip_path +def zip_result_bundle(zip_path, state_zips, preview_paths): + zip_path = Path(zip_path).resolve() + safe_mkdir(zip_path.parent) + if zip_path.exists(): + zip_path.unlink() + + comparison_path = Path(preview_paths["comparison"]).resolve() + screenshots_dir = Path(preview_paths["screenshots"]).resolve() + + with zipfile.ZipFile(zip_path, "w", compression=zipfile.ZIP_DEFLATED) as archive: + for state_key, state_zip in state_zips.items(): + source_zip = Path(state_zip).resolve() + archive.write( + source_zip, + f"dicom_zips/{source_zip.name}", + compress_type=zipfile.ZIP_STORED, + ) + + if comparison_path.exists(): + archive.write( + comparison_path, + f"previews/{comparison_path.name}", + ) + + if screenshots_dir.exists(): + for file_path in screenshots_dir.rglob("*"): + if file_path.is_file(): + archive.write( + file_path, + Path("previews/process_screenshots") / file_path.relative_to(screenshots_dir), + ) + return zip_path + + def set_job(job_id, **updates): with JOBS_LOCK: job = JOBS[job_id] @@ -612,10 +646,11 @@ class Handler(BaseHTTPRequestHandler): output_paths[state_key], job_root / f"{state_key}_{job_id}.zip", ) - set_job(job_id, message="正在打包四状态输出 ZIP...") - zip_path = zip_folder( - output_dir, + set_job(job_id, message="正在整理四状态总 ZIP...") + zip_path = zip_result_bundle( job_root / f"head_ct_morph_{job_id}.zip", + state_zips, + preview_paths, ) return serialize_outputs(output_paths, preview_paths, zip_path, state_zips)