ファイルアップロード
Swagger 2.0 は、Content-Type: multipart/form-data
で送信されるファイルアップロードをサポートしています。つまり、API サーバーはこの操作のために multipart/form-data
を消費する必要があります。
1consumes:2 - multipart/form-data
操作ペイロードは formData
パラメーター (ボディパラメーターではない) を使用して定義されます。ファイルパラメーターは type: file
を持つ必要があります。
1paths:2 /upload:3 post:4 summary: Uploads a file.5 consumes:6 - multipart/form-data7 parameters:8 - in: formData9 name: upfile10 type: file11 description: The file to upload.
この定義は、次の HTTP リクエストに対応します。
1POST /upload2Host: example.com3Content-Type: multipart/form-data; boundary=abcde123454Content-Length: 2045
6--abcde123457Content-Disposition: form-data; name="upfile"; filename="example.txt"8Content-Type: text/plain9
10File contents go here.11--abcde12345--
Swagger UI は、ファイル入力コントロールを使用してファイルパラメーターを表示し、ユーザーがアップロードするローカルファイルを参照できるようにします。
ファイルのアップロード + その他のデータ
ファイルパラメーターは、他のフォームデータと一緒に送信できます。
1parameters:2 - in: formData3 name: upfile4 type: file5 required: true6 description: The file to upload.7 - in: formData8 name: note9 type: string10 required: false11 description: Description of file contents.
対応する HTTP リクエストペイロードには複数のパートが含まれます。
1POST /upload2Host: example.com3Content-Type: multipart/form-data; boundary=abcde123454Content-Length: 3325
6--abcde123457Content-Disposition: form-data; name="upfile"; filename="example.txt"8Content-Type: text/plain9
10File contents go here.11--abcde1234512Content-Disposition: form-data; name="note"13
14Uploading a file named "example.txt"15--abcde12345--
複数アップロード
いくつかの名前付きファイルパラメーターを持つことができ、それぞれ個別に定義されます。
1parameters:2 - in: formData3 name: upfile14 type: file5 required: true6 - in: formData7 name: upfile28 type: file9 required: false10 - in: formData11 name: upfile312 type: file13 required: false
ただし、任意の数のファイル (ファイルの配列) のアップロードはサポートされていません。https://github.com/OAI/OpenAPI-Specification/issues/254 で機能要求がオープンされています。今のところ、任意の数のファイルをアップロードするための回避策として、バイナリ文字列配列を使用できます。
1type: array2items:3 type: string4 format: binary
ただし、これにより Swagger UI でファイルアップロードインターフェースは生成されません。
FAQ
PUT 経由でファイルをアップロードできますか?
Swagger 2.0 は Content-Type: multipart/form-data
を持つファイルアップロードリクエストをサポートしていますが、HTTP メソッドは問いません。操作が multipart/form-data
を消費する限り、POST、PUT、またはその他のメソッドを使用できます。ペイロードが単なる生のファイルコンテンツであるアップロードは multipart/form-data
ではないため、Swagger 2.0 ではサポートされていません。つまり、Swagger 2.0 は次のようなものをサポートしません。
1curl --upload-file archive.zip http://example.com/upload
また、ブラウザの HTML フォームは GET と POST メソッドのみをサポートしているため、Swagger UI でのファイルアップロードは POST リクエストでのみ機能することにも注意してください。
アップロードされたファイルの Content-Type を定義できますか?
これは OpenAPI 3.0 でサポートされていますが、OpenAPI/Swagger 2.0 ではサポートされていません。2.0 では、操作がファイルを受け入れるとは言えますが、そのファイルが特定のタイプまたは構造であるとは言えません。
回避策として、この機能を拡張するために、例えば ベンダー拡張 を使用できます。
1- in: formData2 name: zipfile3 type: file4 description: Contents of the ZIP file.5 x-mimetype: application/zip
お探しのものが見つかりませんでしたか? コミュニティに質問する
間違いを見つけましたか? お知らせください