diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d737ebee4ce..32435d7375e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ ### Client - Enhance: Unicode絵文字をslugから入力する際に`:ok:`のように最後の`:`を入力したあとにUnicode絵文字に変換できるように - Fix: フォロー中のユーザーに関する"TLに他の人への返信を含める"の設定が分かりづらい問題を修正 +- Fix: ランダム文字列でアップロードする際に拡張子内にドットが含まれるものを正常にアップロードできるように ## 2024.5.0 (merged to 2024.5.0-kinel.1) diff --git a/packages/frontend/src/scripts/upload.ts b/packages/frontend/src/scripts/upload.ts index 3e947183c9ea..9440e526fad5 100644 --- a/packages/frontend/src/scripts/upload.ts +++ b/packages/frontend/src/scripts/upload.ts @@ -29,6 +29,32 @@ const mimeTypeMap = { 'image/png': 'png', } as const; +// tar.gzなど、拡張子内にドットを2つまで許容するものはここに追加 +const specialExtensions = [ + 'gz', + 'bz2', + 'xz', + 'zst', + 'lz', + 'lz4', + 'sz', + 'z', + 'zstd', +] as const; + +function getExtension(filename: string): string { + const parts = filename.split('.'); + + if (parts.length <= 1) return ''; + + for (const ext of specialExtensions) { + if (parts[parts.length - 1] === ext && parts.length > 2) { + return '.' + parts[parts.length - 2] + '.' + parts[parts.length - 1]; + } + } + return '.' + parts.pop(); +} + export function uploadFile( file: File, folder?: any, @@ -45,7 +71,7 @@ export function uploadFile( const reader = new FileReader(); reader.onload = async (): Promise => { const filename = name ?? file.name ?? 'untitled'; - const extension = filename.split('.').length > 1 ? '.' + filename.split('.').pop() : ''; + const extension = getExtension(filename); const ctx = reactive({ id,