diff --git a/backend/open_webui/routers/files.py b/backend/open_webui/routers/files.py index e0ed870787..422bad965d 100644 --- a/backend/open_webui/routers/files.py +++ b/backend/open_webui/routers/files.py @@ -168,6 +168,27 @@ async def process_uploaded_file( db=db_session, ) + # Auto-link to Knowledge Collection when uploaded from one (#24807). + # Mirrors POST /knowledge/{id}/file/add so linking doesn't depend + # on the frontend staying connected after upload. + knowledge_id = file_metadata.get('knowledge_id') + if knowledge_id: + try: + await Knowledges.add_file_to_knowledge_by_id( + knowledge_id=knowledge_id, + file_id=file_item.id, + user_id=user.id, + directory_id=file_metadata.get('directory_id'), + ) + await process_file( + request, + ProcessFileForm(file_id=file_item.id, collection_name=knowledge_id), + user=user, + ) + log.info(f'Linked file {file_item.id} to knowledge {knowledge_id}') + except Exception as e: + log.warning(f'Failed to link file {file_item.id} to knowledge {knowledge_id}: {e}') + except Exception as e: log.error(f'Error processing file: {file_item.id}') await Files.update_file_data_by_id( diff --git a/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte b/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte index 9f95de1819..691e4f8c47 100644 --- a/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte +++ b/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte @@ -246,7 +246,9 @@ res.content ); - const uploadedFile = await uploadFile(localStorage.token, file).catch((e) => { + const uploadedFile = await uploadFile(localStorage.token, file, { + knowledge_id: knowledge.id + }).catch((e) => { toast.error(`${e}`); return null; }); @@ -265,7 +267,8 @@ toast.warning(uploadedFile.error); fileItems = fileItems.filter((file) => file.id !== uploadedFile.id); } else { - await addFileHandler(uploadedFile.id); + toast.success($i18n.t('File added successfully.')); + init(); } } else { toast.error($i18n.t('Failed to upload file.')); @@ -351,7 +354,8 @@ toast.warning(uploadedFile.error); fileItems = fileItems.filter((file) => file.id !== uploadedFile.id); } else { - await addFileHandler(uploadedFile.id); + toast.success($i18n.t('File added successfully.')); + init(); } } else { toast.error($i18n.t('Failed to upload file.'));