Fast API поддерживает загрузку файлов с помощью запросов POST (составная форма).
Но мне нужен запрос PUT, где файл — это просто тело запроса.< /p>
Я обнаружил, что могу использовать объект Request и существует методstream() для доступа к телу запроса.
Однако у меня есть проблема с асинхронным кодом. Остальная часть моего кода не асинхронна. Первоначально это было приложение WSGI.
Код: Выделить всё
@f_app.put("/share/{share_name}/file/upload")
def upload_file(request: Request, share_name:str):
path = request.headers.get("x-file-path","")
request.state.api_app.router.input.with_stream(request.stream())
return UploadAPIEndpoint(request.state.api_app).action("put",
share_name = share_name, path = path)
Код: Выделить всё
'async_generator' object has no attribute 'read'
Код: Выделить всё
request.state.api_app.router.input.with_stream(environment['wsgi.input'])
request.stream() «асинхронный» в FastAPI.
Как я могу решить эту проблему, не меняя свой код на асинхронный во многих местах?
Может быть, это можно сделать какой-то дополнительный класс, который будет работать как оболочка над асинхронным потоком?
Или, может быть, можно использовать некоторые приемы, такие как «каналы» или «очереди», для запуска двух параллельных сопрограмм? Один будет читать из асинхронного потока и помещать в очередь/канал, а мой основной код будет читать из этой общей очереди/канала?
Есть ли у вас примеры решения этой проблемы?
Подробнее здесь: https://stackoverflow.com/questions/790 ... ync-method