跳至内容

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}
参数 描述
file

类型:BinaryIO

size

类型: int | None 默认值: None

filename

类型: str | None 默认值: None

headers

类型: Headers | None 默认值: None

源代码位于 starlette/datastructures.py
414
415
416
417
418
419
420
421
422
423
424
425
def __init__(
    self,
    file: typing.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()

file 实例属性

file

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

filename 实例属性

filename

原始文件名。

size 实例属性

size

文件大小(以字节为单位)。

headers 实例属性

headers

请求的 Header。

content_type 实例属性

content_type

来自 Header 的请求内容类型。

read async

read(size=-1)

从文件读取一些字节。

为了支持异步操作,此方法在线程池中执行。

参数 描述
size

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

类型: int 默认值: -1

源代码位于 fastapi/datastructures.py
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
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)

将一些字节写入文件。

通常情况下,您不会在请求中读取的文件上使用此方法。

为了支持异步操作,此方法在线程池中执行。

参数 描述
数据

要写入文件的字节数据。

类型: bytes

源代码位于 fastapi/datastructures.py
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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)

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

任何后续的读取或写入操作都将从此位置开始。

为了支持异步操作,此方法在线程池中执行。

参数 描述
偏移量

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

类型: int

源代码位于 fastapi/datastructures.py
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
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()

关闭文件。

为了支持异步操作,此方法在线程池中执行。

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

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