如何在Swagger(OpenAPI)中发布文件?

时间:2013-01-22 09:37:20

标签: swagger swagger-ui openapi

我正在使用Swagger来记录我的REST服务。我的一项服务需要上传CSV文件。我将以下内容添加到我的JSON API定义中的parameters部分:

{
       "name": "File",
       "description": "The file in zip format.",
       "paramType": "body",
       "required": true,
       "allowMultiple": false,
       "dataType": "file"
}

现在我在Swagger UI页面上看到了文件上传选项。但是当我选择一个文件并单击“试一试”时,我收到以下错误:

  

NS_ERROR_XPC_BAD_OP_ON_WN_PROTO:jquery-1.8.0.min.js中对WrappedNative原型对象的非法操作(第2行)

页面不断处理,我没有得到任何回复。

任何想法可能出错?

4 个答案:

答案 0 :(得分:36)

OpenAPI规范2.0

在Swagger 2.0(OpenAPI Specification 2.0)中,使用表单参数(List)并将in: formData设置为文件。此外,操作type必须是consumesmultipart/form-data或两者兼而有之。

application/x-www-form-urlencoded

OpenAPI规范3.0

OpenAPI Specification 3.0中,文件被定义为二进制字符串,即 consumes: - multipart/form-data # and/or application/x-www-form-urlencoded parameters: - name: file in: formData # <----- description: The uploaded file data required: true type: file # <----- + type: string(或format: binary,具体取决于用例)。使用与任何其他模式类型相同的语义描述文件输入/输出内容(与OpenAPI 2.0不同):

多部分请求,单个文件:

format: byte

多部分请求,文件数组:

requestBody:
  content:
    multipart/form-data:
      schema:
        type: object
        properties:
          # 'file' will be the field name in this multipart request
          file:
            type: string
            format: binary

直接POST / PUT文件(请求正文是文件内容):

requestBody:
  content:
    multipart/form-data:
      schema:
        type: object
        properties:
          # The property name 'file' will be used for all files.
          file:
            type: array
            items:
              type: string
              format: binary

注意:语义与其他OpenAPI 3.0架构类型相同:

requestBody:
  content:
    application/octet-stream:
      # any media type is accepted, functionally equivalent to `*/*`
      schema:
        # a binary file of any type
        type: string
        format: binary

更多信息:

答案 1 :(得分:18)

最后我找到了答案,实际上以前没有支持文件上传,现在他们更新了 swagger-ui.js 文件。您需要用new替换旧的,还必须在特定参数的参数下定义这些属性:

 "paramType": "body",
 "dataType": "file",

答案 2 :(得分:4)

我似乎与

合作
 "paramType": "formData",
 "dataType": "file",

答案 3 :(得分:1)

我正在使用Open API v 3.0.3

这是我的swagger.json的样子:

"/media/upload": {
      "post": {
        "tags": ["Media"],
        "name": "Upload Media",
        "description": "Uploads a Media file to the server.",
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "media": {
                    "type": "string",
                    "format": "base64"
                  }
                }
              }
            }
          }
        }
      }
    }

这是它张扬的样子:

enter image description here