From c07686928adbcff5064d77aa6a27c3989560c886 Mon Sep 17 00:00:00 2001 From: Escape0707 Date: Mon, 18 May 2026 16:13:12 +0900 Subject: [PATCH] fix(api): close base64 file lookup sessions (#36308) Co-authored-by: Stephen Zhou --- api/services/attachment_service.py | 13 +++++++------ api/services/file_service.py | 13 +++++++------ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/api/services/attachment_service.py b/api/services/attachment_service.py index 54e664e944..dad7163739 100644 --- a/api/services/attachment_service.py +++ b/api/services/attachment_service.py @@ -22,10 +22,11 @@ class AttachmentService: raise AssertionError("must be a sessionmaker or an Engine.") def get_file_base64(self, file_id: str) -> str: - upload_file = self._session_maker(expire_on_commit=False).scalar( - select(UploadFile).where(UploadFile.id == file_id).limit(1) - ) - if not upload_file: - raise NotFound("File not found") - blob = storage.load_once(upload_file.key) + with self._session_maker(expire_on_commit=False) as session: + upload_file = session.scalar(select(UploadFile).where(UploadFile.id == file_id).limit(1)) + if not upload_file: + raise NotFound("File not found") + upload_file_key = upload_file.key + + blob = storage.load_once(upload_file_key) return base64.b64encode(blob).decode() diff --git a/api/services/file_service.py b/api/services/file_service.py index cd412638e0..4d3afcc9ad 100644 --- a/api/services/file_service.py +++ b/api/services/file_service.py @@ -131,12 +131,13 @@ class FileService: return file_size <= file_size_limit def get_file_base64(self, file_id: str) -> str: - upload_file = self._session_maker(expire_on_commit=False).scalar( - select(UploadFile).where(UploadFile.id == file_id).limit(1) - ) - if not upload_file: - raise NotFound("File not found") - blob = storage.load_once(upload_file.key) + with self._session_maker(expire_on_commit=False) as session: + upload_file = session.scalar(select(UploadFile).where(UploadFile.id == file_id).limit(1)) + if not upload_file: + raise NotFound("File not found") + upload_file_key = upload_file.key + + blob = storage.load_once(upload_file_key) return base64.b64encode(blob).decode() def upload_text(self, text: str, text_name: str, user_id: str, tenant_id: str) -> UploadFile: