我正在使用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行)
页面不断处理,我没有得到任何回复。
任何想法可能出错?
答案 0 :(得分:36)
在Swagger 2.0(OpenAPI Specification 2.0)中,使用表单参数(List
)并将in: formData
设置为文件。此外,操作type
必须是consumes
,multipart/form-data
或两者兼而有之。
application/x-www-form-urlencoded
在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"
}
}
}
}
}
}
}
}
这是它张扬的样子: