跳到内容

UploadFile

你可以将*路径操作函数*的参数类型定义为 UploadFile,以接收请求中的文件。

您可以直接从 fastapi 导入它。

from fastapi import UploadFile

fastapi.UploadFile

UploadFile(file, *, size=None, filename=None, headers=None)

基类: UploadFile

请求中上传的文件。

将其定义为*路径操作函数*(或依赖项)的参数。

如果你使用的是常规的 def 函数,可以使用 upload_file.file 属性来访问原始的 Python 标准文件(阻塞式,非异步),这对于非异步代码非常有用且必要。

FastAPI 文档的请求文件部分阅读更多相关信息。

示例

from typing import Annotated

from fastapi import FastAPI, File, UploadFile

app = FastAPI()


@app.post("/files/")
async def create_file(file: Annotated[bytes, File()]):
    return {"file_size": len(file)}


@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile):
    return {"filename": file.filename}
源代码位于 starlette/datastructures.py
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
def __init__(
    self,
    file: BinaryIO,
    *,
    size: int | None = None,
    filename: str | None = None,
    headers: Headers | None = None,
) -> None:
    self.filename = filename
    self.file = file
    self.size = size
    self.headers = headers or Headers()

    # Capture max size from SpooledTemporaryFile if one is provided. This slightly speeds up future checks.
    # Note 0 means unlimited mirroring SpooledTemporaryFile's __init__
    self._max_mem_size = getattr(self.file, "_max_size", 0)

file instance-attribute

file

标准的 Python 文件对象(非异步)。

filename instance-attribute

filename

原始文件名。

size instance-attribute

size

文件的字节大小。

headers instance-attribute

headers

请求的头信息。

content_type instance-attribute

content_type

请求的内容类型,来自头信息。

read async

read(size=-1)

从文件中读取一些字节。

为支持 await,与异步兼容,此操作在线程池中运行。

参数 描述
size

要从文件中读取的字节数。

类型: int 默认值: -1

源代码位于 fastapi/datastructures.py
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
async def read(
    self,
    size: Annotated[
        int,
        Doc(
            """
            The number of bytes to read from the file.
            """
        ),
    ] = -1,
) -> bytes:
    """
    Read some bytes from the file.

    To be awaitable, compatible with async, this is run in threadpool.
    """
    return await super().read(size)

write async

write(data)

向文件中写入一些字节。

通常你不会对从请求中读取的文件使用此方法。

为支持 await,与异步兼容,此操作在线程池中运行。

参数 描述
data

要写入文件的字节。

类型: bytes

源代码位于 fastapi/datastructures.py
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
async def write(
    self,
    data: Annotated[
        bytes,
        Doc(
            """
            The bytes to write to the file.
            """
        ),
    ],
) -> None:
    """
    Write some bytes to the file.

    You normally wouldn't use this from a file you read in a request.

    To be awaitable, compatible with async, this is run in threadpool.
    """
    return await super().write(data)

seek async

seek(offset)

移动到文件中的某个位置。

下一次读取或写入将从该位置开始。

为支持 await,与异步兼容,此操作在线程池中运行。

参数 描述
offset

要在文件中定位到的字节位置。

类型: int

源代码位于 fastapi/datastructures.py
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
async def seek(
    self,
    offset: Annotated[
        int,
        Doc(
            """
            The position in bytes to seek to in the file.
            """
        ),
    ],
) -> None:
    """
    Move to a position in the file.

    Any next read or write will be done from that position.

    To be awaitable, compatible with async, this is run in threadpool.
    """
    return await super().seek(offset)

close async

close()

关闭文件。

为支持 await,与异步兼容,此操作在线程池中运行。

源代码位于 fastapi/datastructures.py
132
133
134
135
136
137
138
async def close(self) -> None:
    """
    Close the file.

    To be awaitable, compatible with async, this is run in threadpool.
    """
    return await super().close()