avoid duplicate DICOM zip compression

This commit is contained in:
2026-05-03 00:22:34 +08:00
parent 479a39d880
commit c6e39984a5

View File

@@ -407,6 +407,40 @@ def zip_folder(source_dir, zip_path):
return 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): def set_job(job_id, **updates):
with JOBS_LOCK: with JOBS_LOCK:
job = JOBS[job_id] job = JOBS[job_id]
@@ -612,10 +646,11 @@ class Handler(BaseHTTPRequestHandler):
output_paths[state_key], output_paths[state_key],
job_root / f"{state_key}_{job_id}.zip", job_root / f"{state_key}_{job_id}.zip",
) )
set_job(job_id, message="正在打包四状态输出 ZIP...") set_job(job_id, message="正在整理四状态 ZIP...")
zip_path = zip_folder( zip_path = zip_result_bundle(
output_dir,
job_root / f"head_ct_morph_{job_id}.zip", job_root / f"head_ct_morph_{job_id}.zip",
state_zips,
preview_paths,
) )
return serialize_outputs(output_paths, preview_paths, zip_path, state_zips) return serialize_outputs(output_paths, preview_paths, zip_path, state_zips)