From d2645a9c08f557433c3da5c0615e042cbc74a897 Mon Sep 17 00:00:00 2001 From: bicochan Date: Thu, 1 Oct 2026 15:36:02 +0900 Subject: [PATCH] =?UTF-8?q?[as]=20feat:=20=ED=8C=8C=EC=9D=BC=20=EC=97=85?= =?UTF-8?q?=EB=A1=9C=EB=93=9C=20=ED=99=95=EC=9E=A5=EC=9E=90=20=EC=A0=9C?= =?UTF-8?q?=ED=95=9C=20=EC=A0=95=EC=B1=85=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/as/src/shared/lib/use-tus.ts | 34 +++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/apps/as/src/shared/lib/use-tus.ts b/apps/as/src/shared/lib/use-tus.ts index da054fd82..4f13dafbd 100644 --- a/apps/as/src/shared/lib/use-tus.ts +++ b/apps/as/src/shared/lib/use-tus.ts @@ -32,6 +32,28 @@ interface UseTusReturn { uploads: Record; } +const ALLOWED_EXTENSIONS: readonly string[] = [ + // 문서 + ".pdf", + ".txt", + ".hwp", + ".hwpx", + ".doc", + ".docx", + ".xls", + ".xlsx", + ".ppt", + ".pptx", + // 이미지 + ".jpg", + ".jpeg", + ".png", + ".gif", + ".bmp", + // 압축 + ".zip", +]; + function getDefaultFileKey(file: File) { return `${file.name}::${file.lastModified}::${file.size}`; } @@ -44,12 +66,16 @@ function useTus(options: UseTusOptions = {}): UseTusReturn { const validateFileType = useCallback( (file: File): boolean => { - if (!options.accept) return true; - - const allowedExtensions = options.accept.split(","); const fileExtension = file.name.substring(file.name.lastIndexOf(".")).toLowerCase(); + const acceptExtensions = options.accept + ?.split(",") + .map((extension) => extension.trim().toLowerCase()); - if (!allowedExtensions.includes(fileExtension)) { + const isAllowed = + ALLOWED_EXTENSIONS.includes(fileExtension) && + (!acceptExtensions || acceptExtensions.includes(fileExtension)); + + if (!isAllowed) { alert(`허용되지 않은 파일 형식입니다. (${fileExtension})`); return false; }