FileUpload
파일 업로드 컴포넌트. 드래그 앤 드롭 또는 클릭으로 파일을 업로드하고, 업로드된 파일 목록을 관리한다.
개요
Foundation의 FileUpload 컴포넌트를 래핑하여 CALS 폼 시스템과 통합한다. 허용 확장자·MIME 타입·파일 크기·개수 검증, 읽기 전용, 기존 파일 다운로드·미리보기 등 비즈니스 요구사항을 지원한다.
주요 특징
- ✅ 드래그 앤 드롭: Atlassian Pragmatic DnD 기반 안정적인 파일 드롭
- ✅ 파일 검증: 확장자, MIME 타입, 크기, 빈 파일 검사
- ✅ 읽기 전용: 업로드 영역·삭제 숨김, 열기·다운로드 유지
- ✅ 기존 파일: 서버 저장 파일 목록 + 다운로드/미리보기 콜백
- ✅ FormItem 통합: 라벨, 필수 표시, 수평 배치, 도움말 지원
- ✅ 디자인 토큰: Foundation 토큰 시스템 완벽 호환
기본 사용
드래그 앤 드롭 또는 클릭으로 파일을 업로드한다.
Preview
0 file / -
Drop file or Click to upload
파일 검증
accept, allowedExtensions, maxFileSize, maxFileCount로 업로드 규칙을 설정한다.
Preview
0 file / -
Drop file or Click to upload
읽기 전용
readOnly이면 업로드 영역과 삭제 버튼이 숨겨지고, 기존 파일의 열기·다운로드만 표시된다.
Preview
1 file / 1.95 MB
보고서.pdf
1.95 MB
라벨 / 필수
FormItem 래핑으로 라벨, 필수 표시, 수평 레이아웃을 지원한다.
Preview
0 file / -
Drop file or Click to upload
0 file / -
Drop file or Click to upload
0 file / -
Drop file or Click to upload
라벨 도움말
labelTooltip으로 라벨 옆에 도움말 아이콘을 표시한다.
Preview
0 file / -
Drop file or Click to upload
API Reference
Props
| Prop | Type | Default | Description |
|---|---|---|---|
value | File[] | - | 새로 추가된 파일 (controlled) |
onChange | (files: File[]) => void | - | 파일 변경 콜백 |
existingFiles | CalsExistingFile[] | - | 서버 저장 기존 파일 목록 |
onRemoveExisting | (file: CalsExistingFile) => void | - | 기존 파일 삭제 콜백 |
accept | string | - | 허용 MIME 타입 (HTML accept) |
allowedExtensions | string | - | 허용 확장자 (콤마 구분) |
maxFileSize | number | 5 | 최대 파일 크기 (MB) |
maxFileCount | number | 5 | 최대 파일 수 |
multiple | boolean | true | 다중 파일 선택 |
readOnly | boolean | - | 읽기 전용. 주지 않으면 감싸는 Form·ToolbarForm의 readOnly를 따른다. 업로드 영역·삭제 숨김, 열기·다운로드 유지 |
visible | boolean | true | 표시 여부 |
rejectEmptyFile | boolean | true | 빈 파일 차단 |
height | number | string | - | 컴포넌트 높이 |
label | ReactNode | - | 라벨. ""이면 정렬용 빈 자리만 둔다 (labelTooltip 무시). 안쪽 부품이 aria 속성을 받지 않아 입력란에 잇지 못한다 |
labelTooltip | string | - | 라벨 도움말 (아이콘 hover 시 표시). label에 글자가 있을 때만 나온다 |
required | boolean | - | 필수 입력. FormItem *만 켠다 (안쪽 부품이 aria 속성을 받지 않아 aria-required는 없음, HTML required도 없음) |
orientation | "vertical" | "horizontal" | - | 라벨 위치 |
className | string | - | FormItem 루트 className |
fileUploadClassName | string | - | 업로드 영역(드롭 영역·파일 목록) className |
error | string | - | 오류 문구. 주면 오류 상태(aria-invalid)도 켠다 |
aria-invalid | boolean | - | 오류 상태. true면 문구 없이 상태만 켜고, false면 error가 있어도 상태와 문구를 끈다 |
Events
| Event | Type | Description |
|---|---|---|
onChange | (files: File[]) => void | 파일 변경 시 호출 |
onError | (error: string) => void | 에러 발생 시 호출 |
onRemoveExisting | (file: CalsExistingFile) => void | 기존 파일 삭제 시 호출 |
onDownload | (file: CalsExistingFile) => void | 파일 다운로드 시 호출 |
onPreview | (file: CalsExistingFile) => void | 파일 열기/미리보기 시 호출 |
Ref API
| Method | Type | Description |
|---|---|---|
focus() | () => void | 드롭존 포커스 이동 |
blur() | () => void | 포커스 해제 |
element | HTMLElement | 컨테이너 DOM 요소 |
접근성
권장 사항
- ✅
labelprop으로 업로드 영역에 의미 있는 라벨 제공 - ✅
required설정 시aria-required자동 적용 - ✅ 키보드(Enter/Space)로 파일 선택 대화상자 열기 지원
- ❌ 아이콘만 있는 버튼에
aria-label누락 금지
관련 컴포넌트
- Foundation FileUpload: 기본 FileUpload 컴포넌트
- FormItem: 폼 래퍼
Last updated on