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

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

Susan Sarandon
发布: 2024-12-09 06:53:06
原创
824 人浏览过

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

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