[NestJS] 파일 업로드하기

hahaha·2021년 11월 1일
2

NestJS

목록 보기
10/11

multer

  • 파일 업로드를 위해 사용되는 multipart/form-data를 다루기 위한 node.js의 미들웨어
  • multipart가 아닌 폼에서는 동작하지 않음
$ npm install --save multer
  • NestJS에서 제공하는 Multer 타이핑 패키지 다운
$ npm i -D @types/multer

example

@Post('upload')
@UserInterceptors(FileInterceptor('file'))// 👈 field name must match
@ApiConsumes('multipart/form-data')
@ApiBody({
  schema: {
    type: 'object',
    properties: {
      file: { // 👈 this property
        type:'string',
        format: 'binary'
      },
    },
  },
})
uploadFile(@UploadFile() file: Express.Multer.File) {
  // ...
}

FileInterceptor

  • 인수
    - fieldName: 파일이 있는 HTML 양식에서 필드 이름을 제공하는 문자열
    - options: MulterOptions 타입의 선택적 객체
  • @UploadFile() 데코레이터를 사용해 request에서 파일을 추출함
  • array of file: FilesInterceptor(),@UploadedFiles()
  • multiple files: FileFieldsInterceptor(),@UploadedFiles()

@ApiConsumes()

  • swagger에서 특정 메소드에 대한 파일 업로드 기능 활성화
  • @ApiConsumes('multipart/form-data')

@ApiBody()

  • 요청 바디 명세?

파일 업로드를 위한 데코레이터를 하나로 합치기

//api-file.decorator.ts
export function ApiFile(fieldName: string = 'file') {
  return applyDecorators(
    UseInterceptors(FileInterceptor(fieldName)),
    ApiConsumes('multipart/form-data'),
    ApiBody({
      schema: {
   	    type: 'object',
    	properties: {
    	  [fieldName]: { // 👈 this property
            type:'string',
        	format: 'binary'
      	  },
    	},
      },
    }),
  );
}
  • @ApiFile() 적용 후,
@Post('upload')
@ApiFile('file')
uploadFile(@UploadFile() file: Express.Multer.File) {
  // ...
}
      




profile
junior backend-developer 👶💻

0개의 댓글