首页 >后端开发 >Python教程 >为什么我的 FastAPI 文件上传总是空的,如何修复?

为什么我的 FastAPI 文件上传总是空的,如何修复?

Susan Sarandon
Susan Sarandon原创
2024-12-09 06:53:06808浏览

Why is my FastAPI file upload always empty, and how can I fix it?

如何使用 FastAPI 上传文件?

问题:

尝试根据 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn