Node.js에서 multer를 이용한 파일 업로드 구현
2017. 5. 10. 12:03ㆍ서버 프로그래밍
기존에 사용하던 업로드 관련 소스 코드가 제대로 동작을 하지 않아서 multer를 이용한 방법으로 변경하였다.
https://dzone.com/articles/upload-files-or-images-to-server-using-nodejs
var Storage = multer.diskStorage({
destination: function(req, file, callback) {
callback(null, "./Images");
},
filename: function(req, file, callback) {
callback(null, file.fieldname + "_" + Date.now() + "_" + file.originalname);
}
});
var upload = multer({
storage: Storage
}).array("imgUploader", 3); //Field name and max count
app.post("/api/Upload", function(req, res) {
upload(req, res, function(err) {
if (err) {
return res.end("Something went wrong!");
}
return res.end("File uploaded sucessfully!.");
});
});
<body>
<form id="frmUploader" enctype="multipart/form-data" action="api/Upload/" method="post">
<input type="file" name="imgUploader" multiple />
<input type="submit" name="submit" id="btnSubmit" value="Upload" /> </form>
</body>
업로드한 파일의 이름을 가져오는 방법을 찾다가 여기서 힌트를 얻었다.
var upload = function (req, res) { var deferred = Q.defer(); var storage = multer.diskStorage({ // 서버에 저장할 폴더 destination: function (req, file, cb) { cb(null, imagePath); }, // 서버에 저장할 파일 명 filename: function (req, file, cb) { file.uploadedFile = { name: req.params.filename, ext: file.mimetype.split('/')[1] }; cb(null, file.uploadedFile.name + '.' + file.uploadedFile.ext); } }); var upload = multer({ storage: storage }).single('file'); upload(req, res, function (err) { if (err) deferred.reject(); else deferred.resolve(req.file.uploadedFile); }); return deferred.promise; };