ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Node.js] multer 모듈 이용해서 파일 업로드 하기
    Node.js 2020. 11. 26. 14:44

     

    node.js에서 파일을 업로드 하는 방법을 알아보겠습니다

    자세한건 www.npmjs.com/package/multer 문서에도 잘 나와있습니다

     

    먼저 multer모듈을 설치해줍니다

    npm install --save multer

    1) 파일명, 파일경로를 변경해주고자 할때

    const multer = require('multer')
    const storage = multer.diskStorage({
    	destination: (req, file, cb) => {  // 파일이 업로드될 경로 설정
    		cb(null, 'uploads/')
    	},
    	filename: (req, file, cb) => {	// timestamp를 이용해 새로운 파일명 설정
    		let newFileName = new Date().valueOf() + path.extname(file.originalname)
    		cb(null, newFileName)
    	},
    })
    const upload = multer({ storage: storage })

    2) 파일명, 파일경로를 변경없이 사용하고자 할때

    const multer = require('multer')
    const upload = multer({ dest: 'uploads/' }) // 파일이 업로드될 경로 설정

    지정한 경로의 폴더는 미리 만들어두어야 합니다

     

    router.post('/upload/img', upload.single('single field'), (req, res, next)=>{
    // 파일을 1개만 업로드
    })
    router.post('upload/img', upload.array('array field'), (req, res, next)=>{
    // 파일을 여러개 업로드
    })
    router.post('/upload/img', upload.fields([{ name: 'field1' }, { name: 'field2' }]), (req, res, next)=>{
    // 필드명을 나눠서 업로드
    })

    업로드된 파일은 req.file/req.files 객체에서 확인 할 수 있습니다

     

     

    1) upload.single('single field')의 req.file 객체

      {
        fieldname:'single field',			// multer 세팅할때 지정한 필드명
        originalname:'20201111_39842938.jpg',	// 원본파일 이름
        encoding: '7bit',				// encoding 타입
        mimetype: 'image/jpeg',			// 파일의 mime 타입
        destination: '1606369318091.jpg',		// 저장된 파일 이름
        path: 'uploads\\1606369318091.jpg',		// 파일의 저장된 경로
        size: 2769802				// 파일의 사이즈(byte)
      }
    

    2) upload.array('array field')의 req.files 객체

    [
      {
        fieldname:'array field',			// multer 세팅할때 지정한 필드명
        originalname:'20201111_39842938.jpg',	// 원본파일 이름
        encoding: '7bit',				// encoding 타입
        mimetype: 'image/jpeg',			// 파일의 mime 타입
        destination: '1606369318091.jpg',		// 저장된 파일 이름
        path: 'uploads\\1606369318091.jpg',		// 파일의 저장된 경로
        size: 2769802				// 파일의 사이즈(byte)
      },
      {
        fieldname:'array field',			// multer 세팅할때 지정한 필드명
        originalname:'20201111_49539328.jpg',	// 원본파일 이름
        encoding: '7bit',				// encoding 타입
        mimetype: 'image/jpeg',			// 파일의 mime 타입
        destination: '1606369234765.jpg',		// 저장된 파일 이름
        path: 'uploads\\1606369234765.jpg',		// 파일의 저장된 경로
        size: 2769802				// 파일의 사이즈(byte)
      }  
    ]
    

    3) upload.fields([{ name: 'field1' }, { name: 'field2' }])의 req.files 객체

    {
       field1: [
        {
          fieldname: 'field1',
           originalname: 'localImgFile_1609826450747.jpg',
           encoding: '7bit',
           mimetype: 'image/*',
           destination: 'uploads/team',
           filename: '1609826450475.jpg',
           path: 'uploads\\team\\1609826450475.jpg',
           size: 996693
         }
       ],
       field2: [
         {
           fieldname: 'field2',
           originalname: 'localImgFile_1609826450879.jpg',
           encoding: '7bit',
           mimetype: 'image/*',
           destination: 'uploads/team',
           filename: '1609826450784.jpg',
           path: 'uploads\\team\\1609826450784.jpg',
           size: 26342
         },
         {
           fieldname: 'field2',
           originalname: 'localImgFile_1609826450929.jpg',
           encoding: '7bit',
           mimetype: 'image/*',
           destination: 'uploads/team',
           filename: '1609826450788.jpg',
           path: 'uploads\\team\\1609826450788.jpg',
           size: 25830
         },
         {
           fieldname: 'field2',
           originalname: 'localImgFile_1609826450982.jpg',
           encoding: '7bit',
           mimetype: 'image/*',
           destination: 'uploads/team',
           filename: '1609826450791.jpg',
           path: 'uploads\\team\\1609826450791.jpg',
           size: 36841
         }
       ]
    }

     

    댓글

Designed by Tistory.