如何从传入的 POST 中提取文件

How do you extract a file from an incoming POST

我有一个奇怪的情况,我有一个 POST 附带一个文件。我正在使用 aiohttp 作为服务器。通常我会使用 get 来检索文件,但在这种情况下这是不可能的。我似乎找不到任何关于使用 aiohttp 通过 http 检索文件的文档。

一个简单的例子,假设你使用了一个带有 enctype="multipart/form-data":

的表单
async def handle_file_upload(request):
    data = await request.post()
    print('parts:', data.keys())
    # assuming we have a file called foobar
    print('filename:', data['foobar'].filename)
    print('file object:', data['foobar'].file)
    print('file content:', data['foobar'].file.read())
    ...  # (return response etc.)

在没有保护的情况下在野外使用这样的代码要小心,因为我相信 await request.post() 会将所有请求数据读入内存。如果有人这样做 curl -X POST --data-binary "@/dev/urandom"... 你就有大麻烦了。