Flasgger POST路由中的文件上传选择器

时间:2018-10-09 09:31:15

标签: swagger swagger-ui openapi flasgger

在Flasgger中,我正在尝试为接受上载文件的路线创建文档。但是,尽管坚持使用the specification,但我无法在Flasgger UI中显示文件选择器。

我正在使用最新的(截至今天)运行OpenAPI 3规范的flasgger==0.9.1(如"openapi": '3.0.0'),并且在Swagger-UI中看到了this commit,该文件启用了POST的文件选择器文件请求。

我知道之前也曾问过类似的问题,但是它们都与OAS版本3无关。

我的代码段如下:

Upload a file
Returns ID of uploaded file
---

tags:
- name: "attachments"
schemes:
- "http"

consumes:
- application/octet-stream
produces:
- application/json

requestBody:
  content:
    application/octet-stream:
      schema:
        type: file
        format: binary

responses:
  200:
    ... etc

我在Flasgger UI中仅得到一个空块输入。即使Swagger-UI支持,Flasgger是否也可能不支持它(我认为它是基于它构建的)?还是语法错误?

1 个答案:

答案 0 :(得分:1)

您正在混合使用OpenAPI 2.0和3.0语法。在OAS3中,文件被描述为二进制字符串,即type: string而不是type: file。另外,在OAS3中不使用consumesproducesschemes关键字。

尝试以下操作:

Upload a file
Returns ID of uploaded file
---

tags:
- attachments

requestBody:
  content:
    application/octet-stream:
      schema:
        type: string   # <-------
        format: binary

responses:
  '200':
    description: OK
    content:
      application/json:
        schema:
          # ... etc

请注意,上传OAS3文件需要Swager UI 3.16.0+,但Flassger 0.9.1与UI 3.14.2捆绑在一起,似乎无法更新捆绑的Swagger UI。这种可能性将在下一个更新版本Flassger 0.9.2中添加:

https://github.com/rochacbruno/flasgger#externally-loading-swagger-ui-and-jquery-jscss

因此,您需要等待Flassger 0.9.2。


我还建议您使用Swagger Editor检查生成的OpenAPI文件是否存在语法错误,因为语法错误可能会导致不正确的解析/渲染。 This answer解释了如何从Swagger UI导出OpenAPI文件,以便您可以在其他地方使用它。