본문 바로가기

프로그래밍/Node.js

[Node.js] 파일 업로드 하기 (multer 모듈 사용 )

반응형

[Node.js] 파일 업로드 하기 (multer 모듈 사용 )

 

참조 : https://junspapa-itdev.tistory.com/27

 

[Node.js 12강] 파일 업로드 하기 (multer 모듈 사용, 한번에 파일 여러개 업로드하기, 삽질한 결과 공

이번엔 nodejs에서 파일을 업로드하는 방법을 알아보도록 하겠습니다. 한번에 여러 이미지를 업로드하는 케이스를 개발했는데 상당히 삽질을 했습니다. 1개만 업로드 할 때는 쉽게 처리하는건 굉

junspapa-itdev.tistory.com

<form name="questionForm" method="post" enctype="multipart/form-data" action="/test/save">
  <input type="hidden" name="TEST_SN" value="1">
  
  <ul id="questionFormList">
    <li>
      <input type="hidden" name="Q_SN" value="2">
      <input type="file" name="IMG_FILE">
    </li>
    <li>
      ...
    </li>
    ...
  </ul>
  <input type="submit" value="전송">
</form>
var multer = require('multer');  //multer 모듈 import
var upload = multer({dest: 'public/images/yesno/'}); //업로드 경로 설정
//미리 폴더를 만들어놔야 하며, 경로 맨 앞에 '/'는 붙이지 않습니다.
var multer = require('multer');	

//multer 의 diskStorage를 정의
var storage = multer.diskStorage({
  //경로 설정
  destination : function(req, file, cb){    

    cb(null, 'publics/images/');
  },

  //실제 저장되는 파일명 설정
  filename : function(req, file, cb){
	//파일명 설정을 돕기 위해 요청정보(req)와 파일(file)에 대한 정보를 전달함
    var testSn = req.body.TEST_SN;
    var qSn = req.body.Q_SN;

    //Multer는 어떠한 파일 확장자도 추가하지 않습니다. 
    //사용자 함수는 파일 확장자를 온전히 포함한 파일명을 반환해야 합니다.        
    var mimeType;

    switch (file.mimetype) {
      case "image/jpeg":
        mimeType = "jpg";
      break;
      case "image/png":
        mimeType = "png";
      break;
      case "image/gif":
        mimeType = "gif";
      break;
      case "image/bmp":
        mimeType = "bmp";
      break;
      default:
        mimeType = "jpg";
      break;
    }

    cb(null, testSn + "_" + qSn + "." + mimeType);
  }
});

var upload = multer({storage: storage});

파일명 + 현재일시 추가

const multer = require("multer");
const path = require("path");

let storage = multer.diskStorage({
    destination: function(req, file ,callback){
        callback(null, "upload/")
    },
    filename: function(req, file, callback){
        let extension = path.extname(file.originalname);
        let basename = path.basename(file.originalname, extension);
        callback(null, basename + "-" + Date.now() + extension);
    }
});

// 1. 미들웨어 등록
let upload = multer({
    storage: storage
});

https://victorydntmd.tistory.com/39

반응형