Я пытаюсь создать действие контроллера, которое должно загрузить некоторые файлы и сохранить их с некоторыми строками в базе данных.
Для загрузки файлов я использую FileFieldsInterceptor
и для других строк данных DTO. Оно работает.
Но я хочу задокументировать эту конечную точку, и она не работает. Для файлов я могу использовать @ApiImplicitFile
с @ApiConsumes('multipart/form-data')
, но для других параметров тела я пытаюсь использовать @ApiImplicitBody
decorator, и приложение вылетает с ошибкой в api-parameters.explorer.js
.
Как можно записать параметр тела (кроме файла) в multipart/form-data
модулем @nestjs/swagger
?
@Post()
@ApiOperation({ ...config.api.post })
@ApiConsumes('multipart/form-data')
@ApiImplicitFile({ name: 'file', required: true, description: 'Infographic file' })
@ApiImplicitFile({ name: 'file_preview', required: true, description: 'Infographic preview file' })
@ApiImplicitBody({ name: 'name', required: true, description: 'Infographic title', type: 'string' })
@UseInterceptors(FileFieldsInterceptor([
{ name: 'file', maxCount: 1 },
{ name: 'file_preview', maxCount: 1 },
],
{
storage: storageUpload('infographics'),
limits: {
fileSize: 20971520, // 20Mb
},
fileFilter: (req, file, cb) => {
const mimeTypeList = ['image/png', 'image/jpeg', 'application/pdf'];
return mimeTypeList.some(item => item === file.mimetype)
? cb(null, true)
: cb(null, false);
},
},
), new FilesValidationInterceptor())
upload(@UploadedFiles() files, @Body() createDto: CreateInfographicsDto) {
return this.infographicsService.create(files, createDto);
}