<aside>
📢 @ApiConsumes('multipart/form-data')
선언해야만 application/json 타입이 아니라, 직접 하나씩 프로퍼티 값을 입력할 수 있도록 변경됨~!
</aside>
컨트롤러
@Post()
@UseInterceptors(FileInterceptor('image'))
@ApiOperation({ summary: '타임라인 생성', description: '...'})
@ApiConsumes('multipart/form-data')
async create(
@Req() request,
***@UploadedFile() image: Express.Multer.File,*
*@Body() createTimelineDto: CreateTimelineDto***
): Promise<Timeline> {
const userId = request['user'].id;
return this.timelinesService.create(userId, image, createTimelineDto);
}
dto
Swagger에서 아래처럼 파일을 전송하는 칸 나와야 하는데, 나오지 않음!
이상
현실
원래 Nest가 알아서 라우터 핸들러의 매개변수를 확인하고 자동으로 Swagger를 구성해주는데, @UploadedFile()
데코레이터를 image
에 대한 것은 Swagger 페이지에 나오지 않음 ㅜㅜ
@ApiBody()
데코레이터를 사용하고,
schema의 properties에서 image: { type: ‘string’, format: ‘binary’ }
를 사용하면 된다고 함!
@Post()
@UseInterceptors(FileInterceptor('image'))
@ApiOperation({ summary: '타임라인 생성', description: '...'})
@ApiConsumes('multipart/form-data')
***@ApiBody({
description: 'File upload with additional data',
schema: {
type: 'object',
properties: {
image: {
type: 'string',
format: 'binary',
},
},
},
})***
async create(
@Req() request,
**@UploadedFile() image: Express.Multer.File,
@Body() createTimelineDto: CreateTimelineDto**
): Promise<Timeline> {
const userId = request['user'].id;
return this.timelinesService.create(userId, image, createTimelineDto);
}