콘텐츠로 건너뛰기

KendoReact Upload Overview

KendoReact Upload 컴포넌트는 서버에 파일을 업로드하는 컴포넌트입니다.

그림 1. KendoReact Upload 컴포넌트

이번 포스팅에서는 KendoReact Upload 컴포넌트를 사용해서 파일을 업로드하는 방법과 제공하는 다양한 옵션에 대해서 알아보도록 하겠습니다.

관련 포스팅

KendoReact Upload Package 설치

KendoReact Upload Package는 npm을 통해 설치할 수 있습니다.

npm install --save @progress/kendo-react-upload @progress/kendo-licensing @progress/kendo-svg-icons
Zsh

KendoReact Upload 기본 구문

업로드 컴포넌트의 기본 구문 및 주로 사용하는 속성은 다음과 같습니다.

import { useState } from "react";
import "./App.scss";
import {
  Upload,
  UploadFileInfo,
  UploadHttpHeaders,
  UploadOnAddEvent,
  UploadOnBeforeRemoveEvent,
  UploadOnBeforeUploadEvent,
  UploadOnProgressEvent,
  UploadOnRemoveEvent,
  UploadOnStatusChangeEvent,
} from "@progress/kendo-react-upload";

export const App = () => {
  const token: string = "your token";
  const saveUrl: string =
    "https://demos.telerik.com/kendo-ui/service-v4/upload/save";
  const removeUrl: string =
    "https://demos.telerik.com/kendo-ui/service-v4/upload/remove";

  const [files, setFiles] = useState<Array<UploadFileInfo>>([]);

  const saveHeader: UploadHttpHeaders = {};
  saveHeader["x-access-token"] = token || "";

  const removeHeader: UploadHttpHeaders = {};
  removeHeader["x-access-token"] = token || "";

  const onAdd = (event: UploadOnAddEvent) => {
    console.log("onAdd: ", event.affectedFiles);
    setFiles(event.newState);
  };

  const onRemove = (event: UploadOnRemoveEvent) => {
    console.log("onRemove: ", event.affectedFiles);
    setFiles(event.newState);
  };

  const onProgress = (event: UploadOnProgressEvent) => {
    console.log("onProgress: ", event.affectedFiles);
    setFiles(event.newState);
  };

  const onStatusChange = (event: UploadOnStatusChangeEvent) => {
    console.log("onStatusChange: ", event.affectedFiles);
    setFiles(event.newState);
  };

  const onBeforeUpload = (event: UploadOnBeforeUploadEvent) => {
    console.log("onBeforeUpload: ", event);
    event.additionalData.description = "File upload";
  };

  const onBeforeRemove = (event: UploadOnBeforeRemoveEvent) => {
    console.log("onBeforeRemove: ", event);
    event.additionalData.description = "File remove";
  };

  return (
    <Upload
      autoUpload={true}
      batch={false}
      multiple={true}
      restrictions={{
        allowedExtensions: [".jpg", ".png"],
        maxFileSize: 4000000,
        minFileSize: 500000,
      }}
      defaultFiles={[]}
      withCredentials={false}
      onAdd={onAdd}
      onRemove={onRemove}
      onProgress={onProgress}
      onStatusChange={onStatusChange}
      onBeforeUpload={onBeforeUpload}
      onBeforeRemove={onBeforeRemove}
      saveHeaders={saveHeader}
      removeHeaders={removeHeader}
      saveUrl={saveUrl}
      removeUrl={removeUrl}
    />
  );
};
JavaScript

saveUrl

파일을 업로드하는 서버 URL을 입력합니다.

요청 헤더

그림 2. 파일 업로드 시 요청 헤더

페이로드

------WebKitFormBoundary21NpL03Beueshzq2
Content-Disposition: form-data; name="files"; filename="Image1.png"
Content-Type: image/png


------WebKitFormBoundary21NpL03Beueshzq2--

removeUrl

업로드 후 파일 목록에서 X 표시를 눌러 파일을 제거할 때 사용하는 URL을 입력합니다.

요청 헤더

그림 3. 파일 제거 시 요청 헤더

페이로드

------WebKitFormBoundary4euvsz5NKE8eH11Q
Content-Disposition: form-data; name="fileNames"

Image1.png
------WebKitFormBoundary4euvsz5NKE8eH11Q--

autoUpload

기본적으로 파일을 선택하면 즉시 서버로 업로드 합니다. 만약 해당 값을 false로 설정하면 파일을 서버로 업로드 되지 않고 목록에만 추가 됩니다. actionsLayout 속성을 추가하여 사용자가 업로드 버튼을 눌러 업로드를 수행할 수 있습니다.

batch

해당 값이 true일 경우 선택한 파일을 요청 한번에 업로드 합니다. 해당 값이 false일 경우 선택한 파일 개수 만큼 업로드 요청이 발생합니다.

multiple

여러 개 파일을 선택할 수 있는지 여부를 설정합니다. 해당 값이 false일 경우 파일 한 개만 선택 가능합니다.

disabled

컴포넌트 활성화 여부를 설정합니다. 기본 값은 false이며 해당 값이 true로 설정되어 있으면 업로드 컴포넌트를 사용할 수 없습니다.

restrictions

첨부 파일 허용할 파일 확장자 및 첨부 가능한 파일의 최소 및 최대 크기를 설정할 수 있습니다.

defaultFiles

파일의 초기 목록 값을 설정합니다.

saveHeaders

파일 업로드 시 헤더에 추가할 값을 설정합니다.

removeHeaders

파일 제거 시 헤더에 추가할 값을 설정합니다.

onAdd

업로드할 새 파일을 선택하면 이벤트가 발생합니다.

onRemove

목록에서 파일이 제거되면 이벤트가 발생합니다. 선택적으로 요청이 있는 경우 서버 응답이 포함될 수 있습니다.

onStatusChange

파일의 상태가 변경되면 이벤트가 발생합니다. 선택적으로 요청이 있을 경우 서버 응답이 포함될 수 있습니다.

onProgress

파일 업로드 진행률이 변경될 때 이벤트가 발생합니다.

onBeforeUpload

파일 업로드 요청 전에 이벤트가 발생합니다. 요청에 데이터를 추가하는 데 사용할 수 있습니다.

event.additionalData.key = value 형태로 데이터를 추가할 수 있습니다.

onBeforeRemove

파일 제거 요청 전에 이벤트가 발생합니다. 요청에 데이터를 추가하는 데 사용할 수 있습니다.

event.additionalData.key = value 형태로 데이터를 추가할 수 있습니다.

마치며…

사실 업로드 컴포넌트는 기본 그대로 사용한다면 사용하는 데 크게 어렵지 않습니다. 하지만 업로드 컴포넌트는 다른 컴포넌트와는 다르게 파일 핸들러 서버와 통신을 해야 하기 때문에 파일 핸들러 서버 구성에 따라서 추가해줘야 하는 항목들이 존재하며 업로드 파일의 썸네일 등의 작업을 추가로 하는 경우가 많기 때문에 다른 컴포넌트에 비해 추가적인 작업이 많은 것이 사실입니다.

다음 포스팅에서는 커스텀 UI를 만들어서 업로드 한 파일 정보와 썸네일을 보여주고 업로드 상태에 따라서 파일 제거 및 재전송 등의 작업을 할 수 있는 버튼을 추가해보겠습니다.

참고 문서

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다