web-dev-qa-db-de.com

Wie poste ich Dateien in Swagger (OpenAPI)?

Ich verwende Swagger, um meine REST= Services zu dokumentieren. Für einen meiner Services muss eine CSV-Datei hochgeladen werden. Ich habe dem Abschnitt parameters in meiner JSON-API-Definition Folgendes hinzugefügt:

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

und jetzt sehe ich die Option zum Hochladen von Dateien auf meiner Swagger-Benutzeroberflächenseite. Wenn ich jedoch eine Datei auswähle und auf "Ausprobieren" klicke, wird die folgende Fehlermeldung angezeigt:

NS_ERROR_XPC_BAD_OP_ON_WN_PROTO: Unzulässiger Vorgang für WrappedNative-Prototypobjekt in jquery-1.8.0.min.js (Zeile 2)

Die Seite wird kontinuierlich bearbeitet und ich erhalte keine Antwort.

Irgendwelche Ideen was könnte falsch sein?

47
Popeye

endlich habe ich antwort darauf gefunden, eigentlich gibt es vorher keine unterstützung für datei hochladen , jetzt haben sie aktualisiert swagger-ui.js Datei. Sie müssen Ihre alte durch eine neue ersetzen und diese Eigenschaften unter Parameter für bestimmte Parameter definieren:

 "paramType": "body",
 "dataType": "file",
18
Popeye

OpenAPI-Spezifikation 2.0

Verwenden Sie in Swagger 2.0 ( OpenAPI Specification 2. ) einen Formularparameter (in: formData) mit der Einstellung type auf file . Darüber hinaus muss die Operation consumes entweder multipart/form-data, application/x-www-form-urlencoded oder beides.

  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     # <-----

OpenAPI-Spezifikation 3.0

In OpenAPI-Spezifikation 3. sind Dateien als binäre Zeichenfolgen definiert, d. H. type: string + format: binary (oder format: byte, je nach Anwendungsfall). Der Inhalt der Dateieingabe/-ausgabe wird mit der gleichen Semantik wie jeder andere Schematyp beschrieben (im Gegensatz zu OpenAPI 2.0):

Mehrteilige Anfrage, einzelne Datei:

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

Mehrteilige Anfrage, Array von Dateien:

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

POST/PUT-Datei direkt (der Anfragetext ist der Dateiinhalt):

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

Hinweis: Die Semantik ist identisch mit anderen OpenAPI 3.0-Schematypen:

# content transferred in binary (octet-stream):
schema:
  type: string
  format: binary

Weitere Informationen:

40
mstrthealias

Meins scheint zu funktionieren

 "paramType": "formData",
 "dataType": "file",
4
Artjom Kurapov