OAS 2 このページはOpenAPI仕様バージョン2(旧Swagger)に適用されます。最新バージョンについては、OpenAPI 3のページをご覧ください。
ファイルアップロード
Swagger 2.0は、Content-Type: multipart/form-data
で送信されるファイルアップロードをサポートしています。つまり、APIサーバーはこの操作のためにmultipart/form-data
を消費する必要があります。
consumes:
- multipart/form-data
操作ペイロードは、formData
パラメーター(本文パラメーターではない)を使用して定義されます。ファイルパラメーターはtype: file
である必要があります。
paths:
/upload:
post:
summary: Uploads a file.
consumes:
- multipart/form-data
parameters:
- in: formData
name: upfile
type: file
description: The file to upload.
この定義は、次のHTTPリクエストに対応します。
POST /upload
Host: example.com
Content-Type: multipart/form-data; boundary=abcde12345
Content-Length: 204
--abcde12345
Content-Disposition: form-data; name="upfile"; filename="example.txt"
Content-Type: text/plain
File contents go here.
--abcde12345--
Swagger UIは、ファイル入力コントロールを使用してファイルパラメーターを表示し、ユーザーがアップロードするローカルファイルを参照できるようにします。
ファイルとその他のデータをアップロード
ファイルパラメーターは、他のフォームデータと一緒に送信できます。
parameters:
- in: formData
name: upfile
type: file
required: true
description: The file to upload.
- in: formData
name: note
type: string
required: false
description: Description of file contents.
対応するHTTPリクエストペイロードには、複数のパートが含まれます。
POST /upload
Host: example.com
Content-Type: multipart/form-data; boundary=abcde12345
Content-Length: 332
--abcde12345
Content-Disposition: form-data; name="upfile"; filename="example.txt"
Content-Type: text/plain
File contents go here.
--abcde12345
Content-Disposition: form-data; name="note"
Uploading a file named "example.txt"
--abcde12345--
複数アップロード
複数の名前付きファイルパラメーターをそれぞれ個別に定義できます。
parameters:
- in: formData
name: upfile1
type: file
required: true
- in: formData
name: upfile2
type: file
required: false
- in: formData
name: upfile3
type: file
required: false
ただし、任意の数のファイル(ファイルの配列)のアップロードはサポートされていません。 https://github.com/OAI/OpenAPI-Specification/issues/254で、機能リクエストが公開されています。今のところ、任意の数のファイルをアップロードするための回避策として、バイナリ文字列配列を使用できます。
type: array
items:
type: string
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は次のようなものをサポートしていません。
curl --upload-file archive.zip http://example.com/upload
Swagger UIでのファイルアップロードはPOSTリクエストでのみ機能することにも注意してください。これは、ブラウザーのHTMLフォームがGETおよびPOSTメソッドのみをサポートしているためです。
アップロードされたファイルのContent-Typeを定義できますか?
これはOpenAPI 3.0でサポートされていますが、OpenAPI/Swagger 2.0ではサポートされていません。2.0では、操作がファイルを受け入れることを言うことはできますが、このファイルが特定のタイプまたは構造であることを言うことはできません。
回避策として、ベンダー拡張機能を使用してこの機能を拡張できます。例:
- in: formData
name: zipfile
type: file
description: Contents of the ZIP file.
x-mimetype: application/zip
お探しの情報が見つかりませんか? コミュニティに質問してください
間違いを見つけましたか? お知らせください