From 1cfd0fb1ae75469d25485a7b2c2c043a3376eebf Mon Sep 17 00:00:00 2001 From: DrMelone <27028174+Classic298@users.noreply.github.com> Date: Tue, 27 Jan 2026 17:45:31 +0100 Subject: [PATCH] fix form for upload file handler When upload_file_handler is called directly (not via HTTP), Form(None) doesn't resolve to None - it remains a Form object. --- backend/open_webui/routers/files.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/backend/open_webui/routers/files.py b/backend/open_webui/routers/files.py index fea81e2384..983f25008f 100644 --- a/backend/open_webui/routers/files.py +++ b/backend/open_webui/routers/files.py @@ -194,15 +194,22 @@ async def upload_file_handler( ): log.info(f'file.content_type: {file.content_type} {process}') - if isinstance(metadata, str): + # Handle metadata: when called directly (not via HTTP), Form(None) remains a Form object + # When called via HTTP, FastAPI resolves it to None or the actual value + if metadata is None or (hasattr(metadata, '__class__') and metadata.__class__.__name__ == 'Form'): + file_metadata = {} + elif isinstance(metadata, str): try: - metadata = json.loads(metadata) + file_metadata = json.loads(metadata) except json.JSONDecodeError: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail=ERROR_MESSAGES.DEFAULT('Invalid metadata format'), ) - file_metadata = metadata if metadata else {} + elif isinstance(metadata, dict): + file_metadata = metadata + else: + file_metadata = {} try: unsanitized_filename = file.filename