【问题标题】:Swagger documentation with multipart/form-data and @ApiImplicitBody带有 multipart/form-data 和 @ApiImplicitBody 的 Swagger 文档
【发布时间】:2019-06-10 13:13:33
【问题描述】:

我正在尝试创建一个控制器操作,它必须上传一些文件并将它们与一些字符串一起保存到数据库中。 对于上传文件,我使用FileFieldsInterceptor 和其他数据字符串 DTO。有用。 但我想大摇大摆地记录这个端点,但它不起作用。对于文件,我可以将@ApiImplicitFile@ApiConsumes('multipart/form-data') 一起使用,但对于其他正文参数,我尝试使用@ApiImplicitBody 装饰器,应用程序崩溃并在api-parameters.explorer.js 中出现错误。

如何通过@nestjs/swagger 模块将正文参数(文件除外)记录到multipart/form-data 中?

@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);
}

【问题讨论】:

  • 很高兴这对您有所帮助。 :-) 不过,您不需要将部分答案复制到问题中。相反,您可以接受一个解决了您的问题的答案,或者不解决这个问题,然后等到您得到解决您问题的答案。看看stackoverflow.com/help/someone-answers

标签: javascript node.js typescript swagger nestjs


【解决方案1】:

错误

您必须使用String 而不是'string' 作为类型:

@ApiImplicitBody({ name: 'name', description: 'Infographic title', type: String })
                                                                         ^^^^^^


表单数据

根据github issue,@nestjs/swagger 尚不支持记录表单数据参数。已经存在 pull request 可以添加此功能,但尚未合并。您可以订阅它以在状态更新时收到通知。

【讨论】:

  • 您帮助消除了错误,谢谢。现在大摇大摆地生成我需要screenshot的所有字段,但是它生成了错误的请求,没有字符串字段。
  • 请求例如:卷曲-X POST “localhost:3000/api/infographics” -H “接受:应用/ JSON” -H “授权:承载eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dpbiI6ImFkbWluIiwicm9sZV9pZCI6MSwidXNlcl9zdGF0dXNfaWQiOjEsImlhdCI6MTU0NzgxMDkxOSwiZXhwIjoxNTQ3ODU0MTE5fQ.BV5h4JmsP8BYhqJuYaZpwlA_lfPd8p15YHSoLzIZVeE” -H“内容类型:多部分/表单数据" -F "file_preview=@768px-JavaScript_logo.png;type=image/png" -F "file=@160px-JavaScript_logo.png;type=image/png"
猜你喜欢
  • 2016-04-22
  • 2019-11-09
  • 1970-01-01
  • 1970-01-01
  • 2020-05-30
  • 2020-11-08
  • 1970-01-01
  • 2021-08-30
  • 1970-01-01
相关资源
最近更新 更多