Простые способы обработки загрузки файлов в FastAPI: подробное руководство

Обработка загрузки файлов является общим требованием в веб-разработке, и 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.