Skip to Content
ComponentsCalsImageUpload

ImageUpload

이미지 전용 업로드 컴포넌트. 드래그 앤 드롭 또는 클릭으로 이미지를 업로드하고, 썸네일 그리드로 관리한다.


개요

Foundation의 FileUpload 컴포넌트를 래핑하여 이미지 전용 업로드 기능을 제공한다. 이미지 확장자만 허용하며, 썸네일 미리보기·회전·미리보기 팝업 등 이미지 관리에 특화된 기능을 제공한다.

주요 특징

  • 이미지 전용: JPG, PNG, GIF만 허용 (확장자 자동 검증)
  • 썸네일 그리드: 업로드된 이미지를 그리드 형태로 미리보기
  • 이미지 회전: 새 파일은 시계방향 90° 회전 지원
  • 미리보기 팝업: 썸네일 클릭 시 원본 이미지 확대 보기
  • 파일 검증: 확장자, 크기, 개수, 빈 파일 검사
  • 읽기 전용: 업로드·삭제·회전 숨김, 다운로드·미리보기 유지
  • FormItem 통합: 레이블, 필수 표시, 수평 배치, 도움말 지원

기본 사용

드래그 앤 드롭 또는 클릭으로 이미지를 업로드한다. 이미지 파일만 허용된다.

0 files / -
0 file / -

Drop file or Click to upload


기존 이미지 목록

서버에 저장된 기존 이미지를 썸네일 그리드로 표시한다. 새 파일(isNew)에는 회전 버튼, 기존 파일에는 다운로드 버튼이 표시된다.

2 files / 2.44 MB

photo.jpg

1.95 MB

logo.png

500 KB


읽기 전용

readOnly이면 업로드 영역·삭제·회전 버튼이 숨겨진다.

1 files / 1.95 MB

photo.jpg

1.95 MB


파일 검증

maxFileSizemaxFileCount로 업로드 규칙을 설정한다.

0 files / -
0 file / -

Drop file or Click to upload


레이블 / 필수

FormItem 래핑으로 레이블, 필수 표시, 수평 레이아웃을 지원한다.

0 files / -
0 file / -

Drop file or Click to upload

0 files / -
0 file / -

Drop file or Click to upload

0 files / -
0 file / -

Drop file or Click to upload


라벨 도움말

labelTooltip으로 레이블 옆에 도움말 아이콘을 표시한다.

0 files / -
0 file / -

Drop file or Click to upload


API Reference

Props

PropTypeDefaultDescription
valueFile[]-새로 추가된 파일 (controlled)
onChange(files: File[]) => void-파일 변경 콜백
existingFilesImageFile[]-서버 저장 기존 이미지 목록
onRemoveExisting(file: ImageFile) => void-기존 파일 삭제 콜백
acceptstring"image/jpeg,image/png,image/gif"허용 MIME 타입
maxFileSizenumber5최대 파일 크기 (MB)
maxFileCountnumber5최대 파일 수
multiplebooleantrue다중 파일 선택
readOnlyboolean-읽기 전용
visiblebooleantrue표시 여부
rejectEmptyFilebooleantrue빈 파일 차단
heightnumber | string-컴포넌트 높이
colorstring-글자색 (토큰 오버라이드)
backgroundColorstring-배경색 (토큰 오버라이드)
borderColorstring-테두리색 (토큰 오버라이드)
labelReactNode-레이블 텍스트
showLabelboolean-빈 레이블 공간 표시
labelTooltipstring-레이블 도움말
requiredboolean-필수 입력
orientation"vertical" | "horizontal"-레이블 위치
classNamestring-컨테이너 CSS 클래스
formClassNamestring-FormItem 래퍼 CSS 클래스

Events

EventTypeDescription
onChange(files: File[]) => void파일 변경 시 호출
onError(error: string) => void에러 발생 시 호출
onRemoveExisting(file: ImageFile) => void기존 파일 삭제 시 호출
onDownload(file: ImageFile) => void파일 다운로드 시 호출
onResolvePreviewUrl(file: ImageFile) => Promise<string>서버 파일 미리보기 URL 변환
onRotate(file: ImageFile, angle: number) => void이미지 회전 시 호출

Ref API

MethodTypeDescription
focus()() => void드롭존 포커스 이동
blur()() => void포커스 해제
elementHTMLElement컨테이너 DOM 요소

접근성

권장 사항

  • label prop으로 업로드 영역에 의미 있는 레이블 제공
  • required 설정 시 aria-required 자동 적용
  • ✅ 미리보기 팝업 Dialog에 aria-label 적용
  • ✅ 모든 액션 버튼에 aria-label 적용 (회전, 다운로드, 삭제)
  • ❌ 아이콘만 있는 버튼에 aria-label 누락 금지

관련 컴포넌트

Last updated on