Swagger OpenAPI3 POST Массив изображений и медиа-файл вместе - PullRequest
4 голосов
/ 26 марта 2020

Я использую Swagger python - flask Framework для создания API OpenAPI 3, который должен выполнять следующие действия:

1. Upload a video file

2. Upload an array of images

3. Upload extra string data.

Я могу успешно загрузить один файл успешно, используя:

MyFileUploadAPI:
 post:
  operationId: my_file_upload
  requestBody:
    content:
      multipart/form-data:
        schema:
          $ref: '#/components/schemas/videofile'

components:
  schemas:    
    videofile:
      type: object
      properties:
        upload:
         type: string
         format: binary


# This works fine
def my_file_upload(videofile):  
    file_name = videofile.filename

И я могу загрузить массив изображений и других данных, используя:

MyMultipleImagesUploadAPI:
 post:
  operationId: multiple_files
  requestBody:
    content:
      application/json:
        schema:
          $ref: '#/components/schemas/multiplefiles'
components:
  schemas:    
    multiplefiles:
      type: object
      properties:
        Images:
          items:
            $ref: '#/components/schemas/MyImage'
        TotalCount:
          type: integer

# This works fine
def multiple_files(body):    

    if connexion.request.is_json:
        body = multiplefiles.from_dict(connexion.request.get_json())                
        images = body._images
        count = body._totalcount

Теперь я могу sh объединить их вместе (загрузка видео + несколько изображений + дополнительные данные) Итак, я сделал следующее:

/MyEverythingAPI:
post:
  operationId: video_multiple_images
  requestBody:
    content:
      multipart/form-data:
        schema:
          $ref: '#/components/schemas/everything'

components:
  schemas:  
  everything:
    type: object
    properties:
      Video:
        type: string
        format: binary
      Images:
        type: array
        items:
          $ref: '#/components/schemas/MyImage'
      TotalCount:
        type: integer

# This has issues
def video_multiple_images(body, video_clip, **kwargs): 
   #body = {'images': ['[object File]'], 'totalcount': 2}
   uploaded_file_name = video_clip.filename

Теперь есть две проблемы, которые, как я вижу, просто не верны:

Проблема 1. Виде_клип не получался перешел к функции video_multiple_images .
Я отладил и отследил ее и увидел, что она не добавляется, потому что в мою сигнатуру функции не было добавлено ** kwargs. Когда я добавил это, видео-файл начал проходить через. Эта статья помогла мне решить эту часть: https://github.com/zalando/connexion/pull/753/files Я могу решить эту проблему, но хотел бы знать, почему это так.

Выпуск 2. The массив изображений отображается как [объектный файл] '' [объектный файл] '' и т. д. c. Этот пост указывает, что это не поддерживается в OpenAPI 3: В Swapger openapi v3.0.0, проблема при загрузке нескольких файлов

Так как я могу передать видеофайл + массив изображений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...