File Upload

File Upload (파일 업로드)

사용자가 기기에서 파일을 선택하고 업로드할 때 사용하는 컴포넌트예요. 드래그 앤 드롭, 파일 목록 표시, 미리보기 등 파일 업로드에 필요한 기능을 제공해요.

출처: 문서

본문

사용법 (Usage)

import { FileUpload } from "@chakra-ui/react"
<FileUpload.Root>
  <FileUpload.HiddenInput />
  <FileUpload.Label />
  <FileUpload.Dropzone>
    <FileUpload.DropzoneContent />
  </FileUpload.Dropzone>
  <FileUpload.Trigger />
  <FileUpload.ItemGroup>
    <FileUpload.Item>
      <FileUpload.ItemPreview />
      <FileUpload.ItemFileName />
      <FileUpload.ItemSizeText />
      <FileUpload.ItemDeleteTrigger />
    </FileUpload.Item>
  </FileUpload.ItemGroup>
</FileUpload.Root>

단축 (Shortcuts)

FileUpload 컴포넌트는 일반적인 사용 사례를 위한 여러 단축(shortcut)도 제공해요.

FileUploadItems

기본적으로 FileUploadItems 단축은 업로드된 파일의 목록을 렌더링해요.

이렇게 할 수도 있어요.

<FileUpload.ItemGroup>
  <FileUpload.Context>
    {({ acceptedFiles }) =>
      acceptedFiles.map((file) => (
        <FileUpload.Item key={file.name} file={file}>
          <FileUpload.ItemPreview />
          <FileUpload.ItemName />
          <FileUpload.ItemSizeText />
          <FileUpload.ItemDeleteTrigger />
        </FileUpload.Item>
      ))
    }
  </FileUpload.Context>
</FileUpload.ItemGroup>

파일 업로드 항목을 커스터마이즈할 필요가 없다면 이렇게 더 간결하게 할 수 있어요.

<FileUpload.ItemGroup>
  <FileUpload.Items />
</FileUpload.ItemGroup>

FileUploadList

FileUploadList 단축은 업로드된 파일의 목록을 렌더링해요. FileUpload.ItemGroup과 FileUpload.Items 컴포넌트를 조합한 거예요.

<FileUpload.List />

는 다음 코드와 같아요.

<FileUpload.ItemGroup>
  <FileUpload.Items />
</FileUpload.ItemGroup>

예제 (Examples)

허용된 파일 (Accepted Files)

accept prop을 사용해서 업로드할 수 있는 파일들을 정의할 수 있어요.

| 예제 (file-upload-accepted-files) |

여러 파일 (Multiple Files)

maxFiles prop을 사용해서 여러 파일을 한 번에 업로드할 수 있어요.

| 예제 (file-upload-multiple) |

커스텀 미리보기 (Custom Preview)

파일을 위한 커스텀 이미지 미리보기를 표시하는 예시예요.

| 예제 (file-upload-custom-preview) |

디렉터리 (Directory)

directory prop을 사용해서 파일 대신 디렉터리를 선택할 수 있게 만들 수 있어요.

| 예제 (file-upload-directory) |

미디어 캡처 (Media Capture)

capture prop을 사용해서 다양한 환경과 미디어 유형에서 파일을 선택하고 업로드할 수 있어요.

참고: 이 기능은 모든 브라우저에서 완전히 지원되지는 않아요.

| 예제 (file-upload-media-capture) |

드롭존 (Dropzone)

드롭존 안에 여러 파일을 드롭하고 maxFiles prop을 사용해서 한 번에 업로드할 수 있는 파일 수를 설정할 수 있어요.

| 예제 (file-upload-with-dropzone) |

조건부 드롭존 (Conditional Dropzone)

useFileUploadContext를 사용해서 허용된 파일 수를 확인하고, 최대 파일 수에 도달했을 때 드롭존을 숨길 수 있어요.

| 예제 (file-upload-with-conditional-dropzone) |

입력 (Input)

FileInput 컴포넌트를 사용해서 텍스트 입력처럼 보이는 트리거를 만들 수 있어요.

| 예제 (file-upload-with-input) |

지우기 가능 (Clearable)

지울 수 있는 파일 업로드 입력의 예시예요.

| 예제 (file-upload-with-input-clear) |

파일 붙여넣기 (Pasting Files)

클립보드에서 붙여넣은 파일을 처리하는 예시예요.

| 예제 (file-upload-with-paste-event) |

스토어 (Store)

파일 업로드를 제어하는 또 다른 방법은 RootProvider 컴포넌트와 useFileUpload 스토어 훅을 사용하는 거예요.

이렇게 하면 파일 업로드 바깥에서도 파일 업로드의 상태와 메서드에 접근할 수 있어요.

| 예제 (file-upload-with-store) |

Props

Root

| PropTable (FileUpload / Root) |

탐색 (Explorer)

File Upload 컴포넌트의 각 부분을 인터랙티브하게 살펴볼 수 있어요. 사이드바에서 부분을 클릭하면 미리보기에서 강조 표시돼요.

| 예제 (file-upload-explorer-demo) |

더 알아보기 (Learn more)