Метод seek
Метод seek применяется к объекту
UploadFile и перемещает внутренний
указатель чтения файла на заданную позицию.
Первым параметром передаётся смещение в байтах,
вторым необязательным параметром - точка отсчёта
whence. По умолчанию whence равен
0, то есть смещение считается от начала файла.
Значение 1 отсчитывает смещение от текущей
позиции, а 2 - от конца файла.
Метод ничего не возвращает.
Синтаксис
await file.seek(offset)
await file.seek(offset, whence)
Пример
Давайте загрузим файл и перемотаем указатель чтения в начало перед повторным чтением:
from fastapi import FastAPI, UploadFile, File
app = FastAPI()
@app.post('/upload/')
async def upload(file: UploadFile = File()):
content = await file.read()
await file.seek(0)
again = await file.read()
return {'size': len(content), 'again': len(again)}
Результат выполнения кода:
{"size": 5, "again": 5}
Пример
Давайте прочитаем файл дважды, каждый раз
возвращая указатель в начало через seek:
from fastapi import FastAPI, UploadFile, File
app = FastAPI()
@app.post('/upload/')
async def upload(file: UploadFile = File()):
first = await file.read()
await file.seek(0)
second = await file.read()
return {'first': first.decode(), 'second': second.decode()}
Результат выполнения кода:
{"first": "abcde", "second": "abcde"}
Пример
Давайте переместим указатель на середину файла и прочитаем оставшуюся часть:
from fastapi import FastAPI, UploadFile, File
app = FastAPI()
@app.post('/upload/')
async def upload(file: UploadFile = File()):
await file.seek(2)
part = await file.read()
return {'part': part.decode()}
Результат выполнения кода для файла с содержимым 'abcde':
{"part": "cde"}
Смотрите также
-
класс
UploadFile,
который представляет загруженный файл -
метод
read,
который читает содержимое файла -
метод
close,
который закрывает файл -
атрибут
size,
который хранит размер файла в байтах