[英]Using UploadFile for direct file upload without a multipart/form-data request
我有一个用于处理文件上传的 FastAPI 端点,看起来像这样:
@app.post('/upload')
async def accept_some_file(f: UploadFile):
content = await f.read()
# ... do stuff with content and generate a response
但这似乎仅适用于multipart/form-data
编码的有效负载。
我希望能够通过如下所示的请求直接发送文件字节:
POST /upload HTTP/1.1
Host: localhost:8080
User-Agent: curl/7.79.1
Accept: */*
Content-Type: image/jpeg
Content-Length: 11044
... image bytes
是否有我可以使用的 FastAPI 设置来允许这样做? 还是有另一种对这个用例更有意义的请求类型?
您可以使用await request.body()
将请求正文作为bytes
获取。 如果您想以同步方式执行此操作(即,改用def
端点,请参阅此处了解def
与async def
),请查看此答案。
from fastapi import Request
@app.post('/upload')
async def accept_some_file(request: Request):
body = await request.body()
或者,您也可以按照本答案中的描述(在“更新”部分下)以 stream 的形式访问请求正文。 通过这种方式,无需将整个主体存储到内存即可提供字节块——请参阅Starlette 文档。 例子:
@app.post('/upload')
async def accept_some_file(request: Request):
body = b''
async for chunk in request.stream():
body += chunk
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.