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

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

Susan Sarandon
发布: 2024-12-08 08:20:10
原创
531 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板