반응형

Filepond와 multer을 이용하면 filePond로 클라이언트단에서 데이터를 쉽게 서버로 전송 할 수 있고 (업로드까지 제공)

multer를 이용하여 서버에 데이터를 쉽게 저장할 수 있다.

 

아래에 Client단과 Server단의 예제 코드를 공유하고자 한다.

 

https://github.com/expressjs/multer/blob/master/doc/README-ko.md

 

GitHub - expressjs/multer: Node.js middleware for handling `multipart/form-data`.

Node.js middleware for handling `multipart/form-data`. - GitHub - expressjs/multer: Node.js middleware for handling `multipart/form-data`.

github.com

 

https://github.com/pqina/filepond

 

GitHub - pqina/filepond: 🌊 A flexible and fun JavaScript file upload library

🌊 A flexible and fun JavaScript file upload library - GitHub - pqina/filepond: 🌊 A flexible and fun JavaScript file upload library

github.com

 

 

 

 

NPM 설치
npm install filepond --save
npm install vue-filepond --save
npm install filepond-plugin-file-validate-type --save

 

Client쪽 (Vue JS 사용)

<template>
<div>
<file-pond
name="uploadName"
ref="pond"
label-idle="Drop files here..."
allow-multiple="true"
maxParallelUploads="50"
maxFiles="50"
server="/api"
v-bind:files="fileList"
v-on:init="handleFilePondInit"
v-on:error="handleError"
v-on:updatefiles="handleFilesUpdated"/>
</div>
</template>
<script>
import vueFilePond from 'vue-filepond';
import 'filepond/dist/filepond.min.css';
import 'filepond-plugin-image-preview/dist/filepond-plugin-image-preview.min.css';
import FilePondPluginFileValidateType from 'filepond-plugin-file-validate-type';
// Create component
const FilePond = vueFilePond(
FilePondPluginFileValidateType,
FilePondPluginImagePreview
);
export default {
name: 'app',
components: {
FilePond
}
data: function() {
return {
fileList: [],
};
},
methods: {
handleFilePondInit: function() {
console.log('FilePond has initialized');
this.fileList = [];
},
handleError: function() {
console.log('FilePond Error');
},
handleFilesUpdated: function(fileList) {
console.log('FilePond has updated : ', fileList);
this.fileList = fileList;
}
},
};
</script>

 

 

 

Server쪽 NodeJS 사용

 

const router = require('express').Router();
const multer = require('multer');
const fs = require('fs');
var storage = multer.diskStorage({
destination: function (req, file, cb) {
dir = "./files/"
fileName = file.fieldname; // filepond에서 name으로 주는 값
if (!fs.existsSync(dir + fileName)) {
fs.mkdirSync(dir + fileName, { recursive : true });
}
cb(null, dir + directoryName);
},
fileName: function (req, file, cb) {
cb(null, getFile(file));
}
});
function getFile(file) {
const originalFile = file.originalname;
return originalFile;
}
var upload = multer({
storage: storage,
limits: { fileSize: 1024 * 1024 * 50 } // 50Mb
});
module.exports = router;

 

 

반응형