问题:
尝试根据 FastAPI 上传文件时官方文档中,file2store 变量始终为空。成功检索文件字节的情况很少见,但这并不常见。
解决方案:
1。安装 Python-Multipart:
要启用文件上传(作为“表单数据”传输),请安装 python-multipart(如果尚未安装):
pip install python-multipart
2.使用 .file 属性进行单个文件上传:
使用 UploadFile 对象的 .file 属性获取实际的 Python 文件(即 SpooledTemporaryFile)。这允许您调用 .read() 和 .close() 等方法。
示例:
from fastapi import File, UploadFile @app.post("/upload") def upload(file: UploadFile = File(...)): try: contents = file.file.read() with open(file.filename, 'wb') as f: f.write(contents) except Exception: return {"message": "Error uploading file."} finally: file.file.close() return {"message": f"Successfully uploaded {file.filename}"}
3.处理大文件:
如果文件超过 1MB 内存限制,请使用块。根据需要调整块大小。
4.异步读/写:
如果您的端点需要 async def,请使用异步方法来读写文件内容。
5.上传多个文件:
@app.post("/upload") def upload(files: List[UploadFile] = File(...)): for file in files: try: contents = file.file.read() with open(file.filename, 'wb') as f: f.write(contents) except Exception: return {"message": "Error uploading file(s)."} finally: file.file.close() return {"message": f"Successfully uploaded {[file.filename for file in files]}."}
6. HTML 表单示例:
请参阅提供的链接以获取用于上传文件的 HTML 表单示例。
以上是为什么我的 FastAPI 文件上传总是空的,如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!