From bf3ced7a00c50ef36f19f18472af44dc662624b1 Mon Sep 17 00:00:00 2001 From: swcho Date: Mon, 22 Sep 2025 17:20:19 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=ED=95=98=EC=88=98=EC=9E=AC=EC=9D=B4?= =?UTF-8?q?=EC=9A=A9=EC=8B=9C=EC=84=A4=EB=93=B1=EB=A1=9D=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EA=B3=84=ED=86=B5=EB=8F=84,=20=ED=8F=89?= =?UTF-8?q?=EB=A9=B4=EB=8F=84=20pdf=EB=A7=8C=20=EC=97=85=EB=A1=9C=EB=93=9C?= =?UTF-8?q?=20=EB=90=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fcltReg/pbnstReg/mngReg/mngRegForm.tsx | 4 +- .../pbnPrfExcelModal/pbnPrfExcelModal.tsx | 2 +- .../src/ui/file-upload/index.tsx | 4 +- .../src/ui/file-upload/lib/file_upload.tsx | 47 +++++++++++++++++-- 4 files changed, 48 insertions(+), 9 deletions(-) diff --git a/apps/wr/components/ui/form/fcltReg/pbnstReg/mngReg/mngRegForm.tsx b/apps/wr/components/ui/form/fcltReg/pbnstReg/mngReg/mngRegForm.tsx index 334f9567d..6fd110297 100644 --- a/apps/wr/components/ui/form/fcltReg/pbnstReg/mngReg/mngRegForm.tsx +++ b/apps/wr/components/ui/form/fcltReg/pbnstReg/mngReg/mngRegForm.tsx @@ -459,7 +459,7 @@ export function PbnstMngForm({ setFiles={(files: File[] | null) => { if (files) fileHandler(files, "relation"); }} - fileTypes="PDF" + fileTypes=".pdf" onFileClick={(index) => { fileDownLoad( relationfiles?.find( @@ -497,7 +497,7 @@ export function PbnstMngForm({ setFiles={(files: File[] | null) => { if (files) fileHandler(files, "plan"); }} - fileTypes="PDF" + fileTypes=".pdf" onFileClick={(index) => { fileDownLoad( planFiles?.find( diff --git a/apps/wr/components/ui/modal/chkgd/pbnPrfExcelModal/pbnPrfExcelModal.tsx b/apps/wr/components/ui/modal/chkgd/pbnPrfExcelModal/pbnPrfExcelModal.tsx index 427323c1e..8f2446099 100644 --- a/apps/wr/components/ui/modal/chkgd/pbnPrfExcelModal/pbnPrfExcelModal.tsx +++ b/apps/wr/components/ui/modal/chkgd/pbnPrfExcelModal/pbnPrfExcelModal.tsx @@ -162,7 +162,7 @@ export default function PbnPrfExcelModal({ setFiles={(files: File[] | null) => { if (files) setFiles(files); }} - fileTypes="xlsx" + fileTypes=".xlsx" maxFiles={1} diff --git a/packages/common/business_components/src/ui/file-upload/index.tsx b/packages/common/business_components/src/ui/file-upload/index.tsx index 7ef6dfc31..af63af7e7 100644 --- a/packages/common/business_components/src/ui/file-upload/index.tsx +++ b/packages/common/business_components/src/ui/file-upload/index.tsx @@ -51,9 +51,9 @@ export const FileUpload = {files&& files.length > 0 && files.map((file:File, i:number) => ( - + - {file.name} + {file.name} ))} diff --git a/packages/common/business_components/src/ui/file-upload/lib/file_upload.tsx b/packages/common/business_components/src/ui/file-upload/lib/file_upload.tsx index 60bfdacfd..42662ab1d 100644 --- a/packages/common/business_components/src/ui/file-upload/lib/file_upload.tsx +++ b/packages/common/business_components/src/ui/file-upload/lib/file_upload.tsx @@ -79,10 +79,49 @@ export const FileUploader = forwardRef< const [isFileTooBig, setIsFileTooBig] = useState(false); const [isLOF, setIsLOF] = useState(false); const [activeIndex, setActiveIndex] = useState(-1); + + // MIME 타입 매핑 함수 추가 + const getAcceptObject = (fileTypes?: string): Record => { + if (!fileTypes) { + return { "image/*": [".jpg", ".jpeg", ".png", ".gif"] }; + } + + // 파일 확장자 별 MIME 타입 매핑 + const extensionToMimeType: Record = { + ".pdf": "application/pdf", + ".jpg": "image/jpeg", + ".jpeg": "image/jpeg", + ".png": "image/png", + ".gif": "image/gif", + ".doc": "application/msword", + ".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + ".xls": "application/vnd.ms-excel", + ".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + ".txt": "text/plain", + }; + + // fileTypes 문자열을 개별 확장자로 분리 + const extensions = fileTypes.split(",").map(ext => ext.trim()); + const acceptObj: Record = {}; + + extensions.forEach(ext => { + // 확장자 앞에 점(.)이 없으면 추가 + const normalizedExt = ext.startsWith(".") ? ext : `.${ext}`; + // 매핑된 MIME 타입 찾기, 없으면 기본값 사용 + const mimeType = extensionToMimeType[normalizedExt] || "application/octet-stream"; + + if (!acceptObj[mimeType]) { + acceptObj[mimeType] = []; + } + + acceptObj[mimeType].push(normalizedExt); + }); + + return acceptObj; + }; + const { - accept = { - "image/*": acceptName?acceptName.split(",").map(extend=>("."+extend)):[".jpg", ".jpeg", ".png", ".gif"], - }, + accept = getAcceptObject(acceptName), maxFiles = 1, maxSize = 4 * 1024 * 1024, multiple = true, @@ -208,7 +247,7 @@ export const FileUploader = forwardRef< }, [value, maxFiles]); const opts = dropzoneOptions - ? dropzoneOptions + ? { ...dropzoneOptions, accept: getAcceptObject(acceptName) } : { accept, maxFiles, maxSize, multiple }; const dropzoneState = useDropzone({