Обработка загрузки файлов является общим требованием в веб-разработке, и FastAPI обеспечивает плавную интеграцию для этой задачи. В этой статье мы рассмотрим несколько методов сохранения загруженных файлов в FastAPI, используя разговорный язык и практические примеры кода.
Метод 1: сохранение файлов с использованием класса UploadFile
FastAPI предоставляет класс UploadFile
, который упрощает процесс обработки загрузки файлов. Вот пример того, как сохранить загруженный файл с помощью этого метода:
from fastapi import FastAPI, UploadFile
app = FastAPI()
@app.post("/upload")
async def upload_file(file: UploadFile = File(...)):
contents = await file.read()
with open(file.filename, "wb") as f:
f.write(contents)
return {"filename": file.filename}
В этом примере мы определяем маршрут /upload
, который принимает параметр file
типа UploadFile
. Мы читаем содержимое файла с помощью await file.read()
и сохраняем его на диск с помощью open(file.filename, "wb")
.
Метод 2: сохранение файлов с помощью shutil
Другой подход к сохранению загруженных файлов — использование модуля shutil
, который обеспечивает файловые операции высокого уровня. Вот пример:
import shutil
from fastapi import FastAPI, UploadFile
app = FastAPI()
@app.post("/upload")
async def upload_file(file: UploadFile = File(...)):
with open(file.filename, "wb") as buffer:
shutil.copyfileobj(file.file, buffer)
return {"filename": file.filename}
В этом методе мы используем функцию shutil.copyfileobj()
для копирования содержимого загруженного файла в буферный файл, открытый в двоичном режиме записи.
Метод 3: сохранение файлов в определенном каталоге
Если вы хотите сохранить загруженные файлы в определенном каталоге, вы можете соответствующим образом изменить путь к файлу. Вот пример:
import os
from fastapi import FastAPI, UploadFile
app = FastAPI()
UPLOAD_DIRECTORY = "./uploads"
@app.post("/upload")
async def upload_file(file: UploadFile = File(...)):
file_path = os.path.join(UPLOAD_DIRECTORY, file.filename)
with open(file_path, "wb") as buffer:
shutil.copyfileobj(file.file, buffer)
return {"filename": file.filename}
В этом методе мы определяем константу UPLOAD_DIRECTORY
, которая представляет каталог, в котором будут сохраняться загруженные файлы. Затем мы используем os.path.join()
для создания полного пути к файлу.
В этой статье мы рассмотрели несколько способов сохранения загруженных файлов в FastAPI. Мы обсудили использование класса UploadFile
, модуля shutil
и сохранение файлов в определенном каталоге. Эти подходы обеспечивают гибкость и удобство при обработке загрузки файлов в приложениях FastAPI.
Реализация этих методов позволит вам беспрепятственно обрабатывать загрузку файлов, обеспечивая удобство работы с вашими веб-приложениями на основе FastAPI.