Multer

이연중·2021년 6월 19일
0

Node.js

목록 보기
12/14

파일 업로드를 위해 multipart/form-data 를 다루기 위한 미들웨어

multipart가 아닌 폼에서는 동작하지 않음

설치


npm install multer --save

사용법


const multer= require('multer')

const storage = multer.diskStorage({
    destination: (req, file, cb) => {
      cb(null, "uploads/")
    },
    filename: (req, file, cb) => {
      cb(null, `${Date.now()}_${file.originalname}`)
    },
    fileFilter:(req,file,cb)=>{
        const ext=path.extname(file.originalname)
        if(ext!=='.png' || ext!=='.jpg'){
            return cb(res.status(400).end('only png or jpg are allowed'),false);
        }
        cb(null,true)
    }
})
const upload = multer({ storage: storage }).single("file_name")

router.post("/uploadImage", (req, res) => {
    upload(req, res, (err) => {
      if (err) {
        return res.status(400).json({ success: false, err })
      }
      return res.status(200).json({
        success: true,
        image: res.req.file.path,
        fileName: res.req.file.filename
      })
    })
})

API


KeyDescriptionNote
fieldname폼에 정의된 필드 명
originalname사용자가 업로드한 파일 명
encoding파일의 엔코딩 타입
mimetype파일의 Mime 타입
size파일의 바이트(byte) 사이즈
destination파일이 저장된 폴더DiskStorage
filenamedestination 에 저장된 파일 명DiskStorage
path업로드된 파일의 전체 경로DiskStorage
buffer전체 파일의 BufferMemoryStorage

multer(opts)

KeyDescription
dest or storage파일이 저장될 위치
fileFilter어떤 파일을 허용할지 제어하는 함수
limits업로드 된 데이터의 한도
preservePath파일의 base name 대신 보존할 파일의 전체 경로

var upload = multer({ dest: 'uploads/' }) //uploads 폴더에 저장

  • .single(filename): 넘겨받은 파일의 name 속성
  • .array(fieldname[, maxcount]): fieldname 인자에 명시된 이름의 파일 전부를 배열 형태로 전달 받음
  • .fields(fields): fields 인자에 명시된 여러 파일을 전달 받음
  • .none(): 오직 텍스트 필드만 허용
  • .any(): 전달된 모든 파일을 허용

Storage

  • DiskStorage: 디스크 스토리지 엔진은 파일을 디스크에 저장하기 위한 모든 제어 기능을 제공

    var storage = multer.diskStorage({
      destination: function (req, file, cb) {
        cb(null, '/uploads')
      },
      filename: function (req, file, cb) {
        cb(null, file.fieldname + '-' + Date.now())
      }
    })
    
    var upload = multer({ storage: storage })
  • MemoryStorage: 메모리 스토리지 엔진은 파일을 메모리에 Buffer 객체로 저장

    var storage = multer.memoryStorage()
    var upload = multer({ storage: storage })

limits

다음의 선택적 속성의 크기 제한을 지정하는 객체

속성설명기본값
fieldNameSize필드명 사이즈 최대값100 bytes
fieldSize필드값 사이즈 최대값1MB
fields파일형식이 아닌 필드의 최대 개수무제한
fileSizemultipart 형식 폼에서 최대 파일 사이즈(bytes)무제한
filesmultipart 형식 폼에서 파일 필드의 최대 개수무제한
partsFor multipart forms, the max number of parts (fields + files)무제한
headerPairsmultipart 형식 폼에서 파싱할 헤더의 key=>value 쌍의 최대 개수2000
const upload = multer({ storage:storage, limits: { files: 10, fileSize: 1024 * 1024 * 1024, } });

저장 파일 조회


app,use('/uploads', express.static('/uploads'));

/uploads url 요청을 통해 uploads 디렉토리에 있는 파일을 요청할 수 있음
ex) http://localhost:5000/uploads/userImage.jpg

참고

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

profile
Always's Archives

0개의 댓글