From 954a367a861cf7838c4b9aead32074ce9d5074cc Mon Sep 17 00:00:00 2001 From: Key Date: Fri, 1 May 2026 03:37:06 +0100 Subject: [PATCH] fix(FileUpload): fallback order now properly guesses the ext (#1038) --- .../fileUpload/utils/upload.ts | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/equicordplugins/fileUpload/utils/upload.ts b/src/equicordplugins/fileUpload/utils/upload.ts index ee749ba8c..f70b9e188 100644 --- a/src/equicordplugins/fileUpload/utils/upload.ts +++ b/src/equicordplugins/fileUpload/utils/upload.ts @@ -854,6 +854,14 @@ function finalizeUploadedUrl(url: string): string { } } +function getFilenameExtension(filename: string): string | undefined { + const dotIndex = filename.lastIndexOf("."); + if (dotIndex < 1 || dotIndex === filename.length - 1) return undefined; + + const ext = filename.slice(dotIndex + 1).toLowerCase(); + return ext.length <= 10 ? ext : undefined; +} + async function notifyUploadSuccess(finalUrl: string): Promise { if (settings.store.autoCopy) { if (!finalUrl || !finalUrl.trim()) { @@ -960,8 +968,20 @@ async function uploadWithFallbacks(fileBlob: Blob, filename: string, primary: Se } async function normalizeUploadBlob(blob: Blob, sourceUrl?: string): Promise<{ blob: Blob; filename: string; }> { + let sourceFileName = ""; + if (blob instanceof File && blob.name) { + sourceFileName = blob.name; + } else if (sourceUrl && URL.canParse(sourceUrl)) { + const segment = new URL(sourceUrl).pathname.split("/").pop(); + if (segment) sourceFileName = decodeURIComponent(segment); + } + const extGuessFromSource = sourceUrl ? getUrlExtension(sourceUrl) : undefined; - let ext = await getExtensionFromBytes(blob) || getExtensionFromMime(blob.type) || extGuessFromSource || "png"; + let ext = await getExtensionFromBytes(blob) + || getExtensionFromMime(blob.type) + || getFilenameExtension(sourceFileName) + || extGuessFromSource + || "bin"; if (ext === "apng" && settings.store.apngToGif) { const gifBlob = await convertApngToGif(blob); @@ -975,14 +995,6 @@ async function normalizeUploadBlob(blob: Blob, sourceUrl?: string): Promise<{ bl const mimeType = getMimeFromExtension(ext); const { preserveOriginalFilename } = settings.store; - let sourceFileName = ""; - if (blob instanceof File && blob.name) { - sourceFileName = blob.name; - } else if (sourceUrl && URL.canParse(sourceUrl)) { - const segment = new URL(sourceUrl).pathname.split("/").pop(); - if (segment) sourceFileName = decodeURIComponent(segment); - } - let filename = `upload.${ext}`; if (preserveOriginalFilename && sourceFileName) { const dotIndex = sourceFileName.lastIndexOf(".");