3

私の NestJS サーバーには、ファイルと追加のフォーム データを受け入れるエンドポイントがあります。たとえば、ファイルとファイル作成者の user_id をフォームに渡します。

ここに画像の説明を入力

NestJS Swagger には、本文にファイルが含まれていること、およびエンドポイントmultipart/form-dataがこれを消費することを明示的に伝える必要があります

4

2 に答える 2

2

幸いなことに、いくつかのバグが原因で、このユース ケースの処理方法について議論が行われました。

これら2つの議論を見て https://github.com/nestjs/swagger/issues/167 https://github.com/nestjs/swagger/issues/417 以下をまとめることができました

DTO を使用して注釈を追加しました。2 つの重要な部分は次のとおりです。

DTOで追加

  @ApiProperty({
    type: 'file',
    properties: {
      file: {
        type: 'string',
        format: 'binary',
      },
    },
  })
  public readonly file: any;

  @IsString()
  public readonly user_id: string;

コントローラーで追加

@ApiConsumes('multipart/form-data')

これにより、作業エンドポイントが得られます

そしてこのOpenAPI Json

{
   "/users/files":{
      "post":{
         "operationId":"UsersController_addPrivateFile",
         "summary":"...",
         "parameters":[
            
         ],
         "requestBody":{
            "required":true,
            "content":{
               "multipart/form-data":{
                  "schema":{
                     "$ref":"#/components/schemas/UploadFileDto"
                  }
               }
            }
         }
      }
   }
}

...

{
   "UploadFileDto":{
      "type":"object",
      "properties":{
         "file":{
            "type":"file",
            "properties":{
               "file":{
                  "type":"string",
                  "format":"binary"
               }
            },
            "description":"...",
            "example":"'file': <any-kind-of-binary-file>"
         },
         "user_id":{
            "type":"string",
            "description":"...",
            "example":"cus_IPqRS333voIGbS"
         }
      },
      "required":[
         "file",
         "user_id"
      ]
   }
}

ここに画像の説明を入力

于 2020-11-30T23:48:39.853 に答える