首页 >后端开发 >Python教程 >为什么我的 FastAPI 文件上传变量始终为空?

为什么我的 FastAPI 文件上传变量始终为空?

Susan Sarandon
Susan Sarandon原创
2024-12-08 08:20:10551浏览

Why is my FastAPI file upload variable always empty?

如何使用 FastAPI 上传文件?

背景

FastAPI 是一个现代化的高性能 Web 框架,提供了一种干净高效的方式构建 API。文件上传是许多 Web 应用程序所需的基本功能。为了实现这一点,FastAPI 提供了多种文件上传处理选项。

问题

在某些情况下,根据 FastAPI 文档上传文件时,file2store 变量始终保持为空。尽管尝试利用 Python 的 UploadFile 或 bytes 方法,此问题仍然存在。

解决方案

可以采取以下措施来解决此问题:

1.安装Python-Multipart

FastAPI 使用表单数据传输上传的文件。安装“python-multipart”可确保正确处理上传的文件。

pip install python-multipart

2.使用内存友好的文件处理

FastAPI 使用 SpooledTemporaryFile 对象将上传的文件存储在内存中。如果文件大小超过 1 MB,则会将其写入磁盘上的临时文件。对于大文件,请考虑以下选项:

  • 按块读取文件: 将文件分成较小的块并按顺序处理它们。这会减少内存消耗,但可能会延长处理时间。
  • 使用shutil.copyfileobj():利用此函数以可管理的块复制文件内容,最大限度地减少内存使用。

3.避免阻塞端点

处理文件上传时,应使用 def 而不是 async def 定义端点函数。这可以防止服务器在等待文件操作完成时阻塞。

4.允许额外数据传输

如果您需要在上传文件的同时传输数据,请查看提供的答案以获取指导。

5.了解端点差异

熟悉 def 和 async def 端点之间的区别及其对文件处理的影响。

文件上传示例代码

考虑以下内容以代码片段为例:

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}"}

此代码处理文件上传并存储内容在与上传文件同名的文件中。如果您遇到任何问题,请查阅提供的资源以获得进一步帮助。

以上是为什么我的 FastAPI 文件上传变量始终为空?的详细内容。更多信息请关注PHP中文网其他相关文章!

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