Node.js

[Node.js] multer로 이미지 업로드 하고 sharp로 리사이징 해주기

오늘보다 더 나은 내일을 위해 2020. 11. 27. 16:10

multer로 업로드된 이미지를 리사이징 해주는 방법에 대해 알아보겠습니다

multer에 대한 설명은 이전 게시물에도 해두었으니 설명은 생략하겠습니다

 

먼저 이미지 리사이징을 위한 sharp모듈과 원본파일을 삭제해주기 위한 fs모듈을 설치해줍니다

npm install --save sharp
npm install --save fs

 

const sharp = require('sharp')
const fs = require('fs')
const multer = require('multer')
const storage = multer.diskStorage({
	destination: (req, file, cb) => {
		cb(null, 'uploads/')
	},
	filename: (req, file, cb) => {
		let newFileName = new Date().valueOf() + path.extname(file.originalname)
		cb(null, newFileName)
	},
})

router.post('/upload', upload.single('img'), (req, res, next)=>{
  try{
    sharp(req.file.path)	// 리사이징할 파일의 경로
        .resize({width:640})	// 원본 비율 유지하면서 width 크기만 설정
        .withMetadata()
        .toFile('[리사이징된 파일이 저장될 경로/파일이름]', (err, info)=>{
            if(err) throw err               
            console.log(`info : ${info}`)
            fs.unlink('[삭제할 파일의 경로]', (err)=>{	
            // 원본파일은 삭제해줍니다
            // 원본파일을 삭제하지 않을거면 생략해줍니다
              if(err) throw err				            
  
            })                  
    	})
  }catch(err){
      console.log(err)
  }
})

 

리사이징 후 결과 객체

  info :  {
   format: 'jpeg',
   width: 640,
   height: 1138,
   channels: 3,
   premultiplied: false,
   size: 88546
 }