From b1a336d019c7c2577517e3c93dec7c8b7bd958ad Mon Sep 17 00:00:00 2001 From: bruce Date: Sat, 6 Jun 2026 16:37:29 +0800 Subject: [PATCH] =?UTF-8?q?fix(file-summary):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=8A=A5=E5=91=8A=E5=AF=BC=E5=87=BA=E4=B8=8B=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/settings.py | 2 ++ review_agent/file_summary/services/export_excel.py | 3 ++- review_agent/file_summary/services/report.py | 4 +++- review_agent/file_summary/views.py | 12 +++++++++++- tests/test_file_summary_views.py | 3 +++ 5 files changed, 21 insertions(+), 3 deletions(-) diff --git a/config/settings.py b/config/settings.py index 11511b5..a4f9fae 100644 --- a/config/settings.py +++ b/config/settings.py @@ -92,6 +92,8 @@ USE_TZ = True STATIC_URL = "static/" STATICFILES_DIRS = [BASE_DIR / "static"] +MEDIA_ROOT = BASE_DIR / "media" +MEDIA_URL = "media/" DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" diff --git a/review_agent/file_summary/services/export_excel.py b/review_agent/file_summary/services/export_excel.py index 2b968f3..b09a6a7 100644 --- a/review_agent/file_summary/services/export_excel.py +++ b/review_agent/file_summary/services/export_excel.py @@ -2,13 +2,14 @@ from __future__ import annotations from pathlib import Path +from django.conf import settings from openpyxl import Workbook from review_agent.models import ExportedSummaryFile, FileSummaryBatch def _exports_dir(batch: FileSummaryBatch) -> Path: - root = Path(batch.work_dir or Path("media") / "file_summary" / batch.batch_no) + root = Path(batch.work_dir) if batch.work_dir else Path(settings.MEDIA_ROOT) / "file_summary" / batch.batch_no export_dir = root / "exports" export_dir.mkdir(parents=True, exist_ok=True) return export_dir diff --git a/review_agent/file_summary/services/report.py b/review_agent/file_summary/services/report.py index 78220f4..0da3f4f 100644 --- a/review_agent/file_summary/services/report.py +++ b/review_agent/file_summary/services/report.py @@ -2,11 +2,13 @@ from __future__ import annotations from pathlib import Path +from django.conf import settings + from review_agent.models import ExportedSummaryFile, FileSummaryBatch def _exports_dir(batch: FileSummaryBatch) -> Path: - root = Path(batch.work_dir or Path("media") / "file_summary" / batch.batch_no) + root = Path(batch.work_dir) if batch.work_dir else Path(settings.MEDIA_ROOT) / "file_summary" / batch.batch_no export_dir = root / "exports" export_dir.mkdir(parents=True, exist_ok=True) return export_dir diff --git a/review_agent/file_summary/views.py b/review_agent/file_summary/views.py index 6bee16e..c32a688 100644 --- a/review_agent/file_summary/views.py +++ b/review_agent/file_summary/views.py @@ -121,4 +121,14 @@ def export_download(request, export_id: int): path = Path(exported.storage_path) if not path.exists(): return JsonResponse({"error": "文件不存在。"}, status=404) - return FileResponse(path.open("rb"), as_attachment=True, filename=exported.file_name) + content_type = ( + "text/markdown; charset=utf-8" + if exported.export_type == ExportedSummaryFile.ExportType.MARKDOWN + else "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" + ) + return FileResponse( + path.open("rb"), + as_attachment=True, + filename=exported.file_name, + content_type=content_type, + ) diff --git a/tests/test_file_summary_views.py b/tests/test_file_summary_views.py index eeff753..588d466 100644 --- a/tests/test_file_summary_views.py +++ b/tests/test_file_summary_views.py @@ -96,3 +96,6 @@ def test_export_download_requires_batch_owner(client, tmp_path, django_user_mode client.force_login(owner) allowed = client.get(reverse("file_summary_export_download", args=[exported.pk])) assert allowed.status_code == 200 + assert "attachment" in allowed["Content-Disposition"] + assert "summary.md" in allowed["Content-Disposition"] + assert allowed["Content-Type"].startswith("text/markdown")