diff --git a/backend/open_webui/routers/files.py b/backend/open_webui/routers/files.py index 8af921bc7a..e10722c0c8 100644 --- a/backend/open_webui/routers/files.py +++ b/backend/open_webui/routers/files.py @@ -179,7 +179,7 @@ def upload_file_handler( user=Depends(get_verified_user), background_tasks: Optional[BackgroundTasks] = None, ): - log.info(f"file.content_type: {file.content_type}") + log.info(f"file.content_type: {file.content_type} {process}") if isinstance(metadata, str): try: diff --git a/src/lib/apis/files/index.ts b/src/lib/apis/files/index.ts index 8351393e3c..07042c4ade 100644 --- a/src/lib/apis/files/index.ts +++ b/src/lib/apis/files/index.ts @@ -1,16 +1,26 @@ import { WEBUI_API_BASE_URL } from '$lib/constants'; import { splitStream } from '$lib/utils'; -export const uploadFile = async (token: string, file: File, metadata?: object | null) => { +export const uploadFile = async ( + token: string, + file: File, + metadata?: object | null, + process?: boolean | null +) => { const data = new FormData(); data.append('file', file); if (metadata) { data.append('metadata', JSON.stringify(metadata)); } + const searchParams = new URLSearchParams(); + if (process !== undefined && process !== null) { + searchParams.append('process', String(process)); + } + let error = null; - const res = await fetch(`${WEBUI_API_BASE_URL}/files/`, { + const res = await fetch(`${WEBUI_API_BASE_URL}/files/?${searchParams.toString()}`, { method: 'POST', headers: { Accept: 'application/json', diff --git a/src/lib/components/channel/MessageInput.svelte b/src/lib/components/channel/MessageInput.svelte index fef7c3a078..337a3affb8 100644 --- a/src/lib/components/channel/MessageInput.svelte +++ b/src/lib/components/channel/MessageInput.svelte @@ -421,13 +421,10 @@ imageUrl = await compressImageHandler(imageUrl, $settings, $config); } - files = [ - ...files, - { - type: 'image', - url: `${imageUrl}` - } - ]; + const blob = await (await fetch(imageUrl)).blob(); + const compressedFile = new File([blob], file.name, { type: file.type }); + + uploadFileHandler(compressedFile, false); }; reader.readAsDataURL(file['type'] === 'image/heic' ? await convertHeicToJpeg(file) : file); @@ -437,7 +434,7 @@ }); }; - const uploadFileHandler = async (file) => { + const uploadFileHandler = async (file, process = true) => { const tempItemId = uuidv4(); const fileItem = { type: 'file', @@ -461,7 +458,6 @@ try { // During the file upload, file content is automatically extracted. - // If the file is an audio file, provide the language for STT. let metadata = null; if ( @@ -473,7 +469,7 @@ }; } - const uploadedFile = await uploadFile(localStorage.token, file, metadata); + const uploadedFile = await uploadFile(localStorage.token, file, metadata, process); if (uploadedFile) { console.info('File upload completed:', { @@ -492,6 +488,7 @@ fileItem.id = uploadedFile.id; fileItem.collection_name = uploadedFile?.meta?.collection_name || uploadedFile?.collection_name; + fileItem.content_type = uploadedFile.meta?.content_type || uploadedFile.content_type; fileItem.url = `${WEBUI_API_BASE_URL}/files/${uploadedFile.id}`; files = files; @@ -807,11 +804,11 @@ {#if files.length > 0}