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 中生成文件上传界面。

常见问题解答

我可以通过 PUT 上传文件吗?

Swagger 2.0 支持使用 Content-Type: multipart/form-data 的文件上传请求,但不关心 HTTP 方法。您可以使用 POST、PUT 或任何其他方法,只要操作使用 multipart/form-data 即可。有效负载仅包含原始文件内容的上传在 Swagger 2.0 中不受支持,因为它们不是 multipart/form-data。也就是说,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

  

没有找到您要找的内容? 询问社区
发现错误? 告诉我们