mirror of
https://github.com/open-webui/open-webui.git
synced 2025-12-12 12:25:20 +00:00
fix: correctly handle clipboard images in prompts
The textVariableHandler was using URL.createObjectURL() for clipboard images, which created a blob URL instead of the required base64-encoded data URL. This caused an "illegal base64 data" error when sending messages with images pasted via a {{CLIPBOARD}} prompt.
This commit updates the handler to use FileReader.readAsDataURL() to properly encode the image, aligning it with the existing on:paste logic. Additionally, it adds error handling for navigator.clipboard.read() to address potential permission issues in Firefox.
This commit is contained in:
parent
8af6a4cf21
commit
0031fb8274
1 changed files with 15 additions and 14 deletions
|
|
@ -168,29 +168,30 @@
|
||||||
return '{{CLIPBOARD}}';
|
return '{{CLIPBOARD}}';
|
||||||
});
|
});
|
||||||
|
|
||||||
const clipboardItems = await navigator.clipboard.read();
|
const clipboardItems = await navigator.clipboard.read().catch((err) => {
|
||||||
|
console.error('Failed to read clipboard items:', err);
|
||||||
|
return [];
|
||||||
|
});
|
||||||
|
|
||||||
let imageUrl = null;
|
|
||||||
for (const item of clipboardItems) {
|
for (const item of clipboardItems) {
|
||||||
// Check for known image types
|
|
||||||
for (const type of item.types) {
|
for (const type of item.types) {
|
||||||
if (type.startsWith('image/')) {
|
if (type.startsWith('image/')) {
|
||||||
const blob = await item.getType(type);
|
const blob = await item.getType(type);
|
||||||
imageUrl = URL.createObjectURL(blob);
|
const reader = new FileReader();
|
||||||
|
reader.onload = (event) => {
|
||||||
|
files = [
|
||||||
|
...files,
|
||||||
|
{
|
||||||
|
type: 'image',
|
||||||
|
url: event.target.result as string
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
reader.readAsDataURL(blob);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (imageUrl) {
|
|
||||||
files = [
|
|
||||||
...files,
|
|
||||||
{
|
|
||||||
type: 'image',
|
|
||||||
url: imageUrl
|
|
||||||
}
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
text = text.replaceAll('{{CLIPBOARD}}', clipboardText);
|
text = text.replaceAll('{{CLIPBOARD}}', clipboardText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue