본문 바로가기
기타2/Nodejs

multer

by 죠부니 2018. 8. 9.
반응형

1. 원하는것

file을 업로드하여 저장하고싶다.

2. 검색

검색결과 multer에 대한 추천내용이 많았다.

https://www.npmjs.com/package/multer

3. 적용

사용법에 대한 한글문서

설치

$ npm install --save multer


const multer = require("multer");
//파일저장위치 지정 및 파일용량 조절
const upload = multer({ dest: 'public/uploads/',limits: { fileSize: 5 * 1024 * 1024 }});


app.post('/upload',upload.single('img_file'), function (req, res){
res.send(req.file);
});


결과값

{

    "fieldname": "img_file",

    "originalname": "27.png",

    "encoding": "7bit",

    "mimetype": "image/png",

    "destination": "public/uploads/",

    "filename": "1eba52d1e71008f7ee36b3ddff5710b4",

    "path": "public\\uploads\\1eba52d1e71008f7ee36b3ddff5710b4",

    "size": 988844

}


4. 추가진행사항

파일을 저장해보니 파일명이 1eba52d1e71008f7ee36b3ddff5710b4 해당형태로 저장이 되어있다. 보안을위해서 이렇게 넣었겠지만
원래이름대로 넣고싶어졌다. 


multer의 옵션중 첫번째 옵션은 dest or storage를 이용한다.

위쪽의 예제는 dest를 사용했으나 storage옵션을 사용해서 변경한다.


const path = require('path');
const multer = require("multer");
//const upload = multer({ dest: 'public/uploads/',limits: { fileSize: 5 * 1024 * 1024 }});
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'public/uploads/')
},
filename: function (req, file, cb) {
//타임스탬프 + 확장자설정
cb(null, file.fieldname + '-' + Date.now()+ path.extname(file.originalname))
}
})
const upload = multer({
storage : storage
,limits: { fileSize: 5 * 1024 * 1024 }});



5. 추가진행사항2

이미지 파일만 받고싶다.
const path = require('path');
const multer = require("multer");
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'public/uploads/')
},
filename: function (req, file, cb) {
cb(null, new Date().valueOf() + path.extname(file.originalname))
}
})

const fileFilter = function (req, file, cb) {
let typeArray = file.mimetype.split('/');
let fileType = typeArray[1];
if (fileType == 'jpg' || fileType == 'png' || fileType == 'jpeg' || fileType == 'gif') {
cb(null, true);
} else {
req.fileValidationError = "jpg,jpeg,png,gif 파일만 업로드 가능합니다.";
cb(null, false)
}

}

const upload = multer({
storage: storage,
fileFilter: fileFilter,
limits: {
fileSize: 5 * 1024 * 1024
}
});


반응형

'기타2 > Nodejs' 카테고리의 다른 글

nvm  (0) 2019.11.28
https://nodejs.org/  (0) 2019.11.28
Express에서 정적 파일 제공  (0) 2018.08.09
cors  (0) 2018.08.09
mysql2  (0) 2018.08.08