私の NestJS サーバーには、ファイルと追加のフォーム データを受け入れるエンドポイントがあります。たとえば、ファイルとファイル作成者の user_id をフォームに渡します。
NestJS Swagger には、本文にファイルが含まれていること、およびエンドポイントmultipart/form-data
がこれを消費することを明示的に伝える必要があります。
私の NestJS サーバーには、ファイルと追加のフォーム データを受け入れるエンドポイントがあります。たとえば、ファイルとファイル作成者の user_id をフォームに渡します。
NestJS Swagger には、本文にファイルが含まれていること、およびエンドポイントmultipart/form-data
がこれを消費することを明示的に伝える必要があります。
幸いなことに、いくつかのバグが原因で、このユース ケースの処理方法について議論が行われました。
これら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"
]
}
}