Skip to content

File uploading with aiohttp (status 500) #975

@fr33mang

Description

@fr33mang

Description

Connexion return 500 error.

My swagger scheme:

requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                fileName:
                  type: string
                  format: binary

Handler:

async def create_task(self, fileName, **request):
        print(fileName)

Html form:

<form method="post" enctype="multipart/form-data" multipart action="">
    <label for="fileName">Choose file to upload</label>
    <input type="file" id="fileName" name="fileName">
    <button>Submit</button>
</form>

Expected behaviour

FileField(name='fileName', filename='script.sql', file=<_io.BufferedRandom name=12>, content_type='application/octet-stream', headers=<CIMultiDictProxy('Content-Disposition': 'form-data; name="fileName"; filename="script.sql"', 'Content-Type': 'application/octet-stream')>)

Actual behaviour

  File "/lib64/python3.6/site-packages/aiohttp/web_protocol.py", line 418, in start
    resp = await task
  File "/lib64/python3.6/site-packages/aiohttp/web_app.py", line 458, in _handle
    resp = await handler(request)
  File "lib64/python3.6/site-packages/aiohttp/web_middlewares.py", line 119, in impl
    return await handler(request)
  File "/lib64/python3.6/site-packages/aiohttp/web_middlewares.py", line 119, in impl
    return await handler(request)
  File "/lib64/python3.6/site-packages/connexion/apis/aiohttp_api.py", line 32, in oauth_problem_middleware
    response = yield from handler(request)
  File "/lib64/python3.6/site-packages/connexion/decorators/coroutine_wrappers.py", line 21, in wrapper
    connexion_response = function(connexion_request)
  File "/lib64/python3.6/site-packages/connexion/decorators/uri_parsing.py", line 143, in wrapper
    response = function(request)
  File "/lib64/python3.6/site-packages/connexion/decorators/validation.py", line 147, in wrapper
    data.update(dict.fromkeys(request.files, ''))  # validator expects string..
AttributeError: 'bytes' object has no attribute 'update'```

### Additional info:

This problem was solved with patching aiohttp_api.AioHttpApi.get_request method.

-Python 3.7.2
-Version: 2.2.0

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions