이미지 업로드에 최적화되어 있다고 하는 Filepond 을 사용하여 업로드를 구현해보자. Filepond 다양한 Framework 에 대한 Adaptor 를 제공하고 있고 사용이 아주 편리하다. 여기에서는 jQuery 기반의 Front-End 와 Spring 기반의 Back-End 환경에서 구현하였다.
개발 및 운영 환경은 아래와 같다.
Development
- JAVA 1.8.x
- Eclipse 4.17.0
- Tomcat 8.x
- npm 6.14.13 , webpack 4.44.1
- HW : MacBook Pro 2019
- macOS Big Sur 11.4
- 2.3Ghz 8Core Intel Corei9
- 16GB 2667 Mhz DDR4
- SSD 1TB
Server
- Tomcat 8.5.58.0
- Open JDK 1.8.0_292-b10
- Oracle Cloud : VM.Standard.E2.1.Micro
- CentOS Linux release 7.9.2009 (Core)
- 1 OCPU, 1GB MEMORY, 50GB Block Volume
- 1Network 0.48 Gbps
설치하기
filepond 는 npm 을 사용하여 아래와 같이 npm 을 사용하여 설치한다. (☛ Using FilePond with JavaScript 참고.)
npm 을 사용하지 않는 경우라면 Git 에서 직접 다운로드 하여 사용하면 된다.
npm install filepond --save
filepond 는 유용한 여러 기능들을 플러그인 형태로 지원하고 있다. 이중에서 필수적이라고 생각되는 File Size Validation, Image Preview, media-preview 를 추가로 설치하였다.
npm install filepond-plugin-file-validate-size --save npm install filepond-plugin-image-preview --save npm install filepond-plugin-media-preview --save
사용하기
Filepond 는 Back-End 부분 즉 서버 사이드 부분을 쉽게 변경하여 사용하는 것을 지원한다.
여기에서는 업로드와 삭제의 경우만 구현하여 사용하였다.
추가로 JWT 기반의 인증을 사용했다. (참고. Spring 기반 웹 프로그램에서 JWT 인증 사용하기 ) 서버 세션을 사용하는 경우는 불필요한 코드이다.
- 업로드(Process) 는 ⑴ multipart/form-data POST 형태로 파일을 전달하고 ⑵ 서버는 해당 요청에 대하여 파일을 저장하고 ⑶ 업로드된 파일을 구분하는 유니크한 값을 텍스트 형태로 응답한다.
- 삭제(Revert)는 ⑴ BODY 에 텍스트 형태로 파일 구분을 위한 유니크한 값을 포함하여 DELETE 형태로 요청하고 ⑵ 서버는 해당하는 파일을 삭제하고 ⑶ 빈값을 응답한다.
Front-End 부부은 아래같은 방법으로 구현하였다. (☛ Setting up FilePond with jQuery 참고)
- HTML 코드에서 파일 업로드를 위한 input tag 추가
- JavaScript 에서 FilePond 인스턴스 생성
input Tag 에 여러가지 속성 값을 사용하여 FilePone 와 플러그인에 대한 설정이 가능하다. (☛ 이부분에 대한 명확한 문서는 발견하지 못했다)
// ================================== // Utility for filepond instance create import * as FilePond from "filepond"; import "filepond/dist/filepond.min.css"; // Import filepond plugins import FilePondPluginFileValidateSize from "filepond-plugin-file-validate-size"; import FilePondPluginImagePreview from "filepond-plugin-image-preview"; import FilePondPluginMediaPreview from "filepond-plugin-media-preview"; // Import filepond plugin styles import "filepond-plugin-image-preview/dist/filepond-plugin-image-preview.css"; /** * create filefond instance * @param {*} renderTo * @param {*} options * @returns filepond instance. */ function createFilePond(renderTo, options) { options = options || {}; // Register the plugin FilePond.registerPlugin( FilePondPluginImagePreview, FilePondPluginMediaPreview, FilePondPluginFileValidateSize ); return FilePond.create(renderTo.get(0), options); }다음 코드는 Spring 기반의 filepond 서버 프로그램이다. (☛ Server configuration 참고)
파일을 저장하거나 삭제하는 부분은 자신의 환경에 맞게 구현하는 작업이 필요하다. 다음 코드에서는 파일 저장을 위하여 미리 구현된 코드를 사용하였다.
다음은 위의 코드를 사용하여 구현된 최종 Front-End 이다
댓글 없음:
댓글 쓰기