From f7f6f5d77f331c1b6ad32472cb3d23c8a2ad6271 Mon Sep 17 00:00:00 2001 From: akharlov Date: Mon, 13 Nov 2023 11:46:56 +0500 Subject: [PATCH] fix(base64-file-converter): fix downloading of index.html content without data preambula --- src/composable/downloadBase64.ts | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/composable/downloadBase64.ts b/src/composable/downloadBase64.ts index 3904315a..a6d75ba6 100644 --- a/src/composable/downloadBase64.ts +++ b/src/composable/downloadBase64.ts @@ -1,15 +1,13 @@ import { extension as getExtensionFromMime } from 'mime-types'; import type { Ref } from 'vue'; -function getFileExtensionFromBase64({ - base64String, +function getFileExtensionFromMime({ + hasMimeType, defaultExtension = 'txt', }: { - base64String: string + hasMimeType: string[] | null defaultExtension?: string }) { - const hasMimeType = base64String.match(/data:(.*?);base64/i); - if (hasMimeType) { return getExtensionFromMime(hasMimeType[1]) || defaultExtension; } @@ -20,13 +18,16 @@ function getFileExtensionFromBase64({ export function useDownloadFileFromBase64({ source, filename }: { source: Ref; filename?: string }) { return { download() { - const base64String = source.value; - - if (base64String === '') { + if (source.value === '') { throw new Error('Base64 string is empty'); } - const cleanFileName = filename ?? `file.${getFileExtensionFromBase64({ base64String })}`; + const hasMimeType = source.value.match(/data:(.*?);base64/i); + const base64String = hasMimeType + ? source.value + : `data:text/plain;base64,${source.value}`; + + const cleanFileName = filename ?? `file.${getFileExtensionFromMime({ hasMimeType })}`; const a = document.createElement('a'); a.href = base64String;