Отправка файлов с сервера

Последнее обновление: 06.09.2022

Для отправки файлов из приложения FastAPI применяется класс FileResponse - наследник класса Response.

Допустим, у нас есть следующий проект:

Отправка файлов в FastAPI

Пусть в проекте в папке public есть файл index.html со следующим кодом:

<!DOCTYPE html>
<html>
<head>
    <title>METANIT.COM</title>
    <meta charset="utf-8" />
</head>
<body>
    <h2>Hello METANIT.COM</h2>
</body>
</html>

В файле main.py определим код для отправки этого файла клиенту:

from fastapi import FastAPI
from fastapi.responses import FileResponse

app = FastAPI()

@app.get("/")
def root():
    return FileResponse("public/index.html")

# альтернативный вариант
@app.get("/file", response_class = FileResponse)
def root_html():
    return "public/index.html"

В качестве обязательного параметра конструктор FileResponse принимает путь к файлу.

При отправке файла браузер сможет интерпретировать его как некоторый код html, и соответственно мы сможем лицезреть эту страницу в браузере:

отправка файлов html в веб-приложении на FastAPI и python

Браузер по умолчанию пытается интерпретировать и отобразить все файлы, которые может, например, текстовые файлы, файлы изображений, какие-то другие мульмедиа-файлы. Если файл не может быть интепретирован браузером, то он загружается. Однако может возникнуть необходимость автоматически загрузить без отображения какие-нибудь интерпретируемые файлы, например, те же самые файлы html. В этом случае мы можем установить для параметра media_type значение application/octet-stream. Кроме того, с помощью параметра filename для загружаемого файла может задать имя:

import mimetypes
from fastapi import FastAPI
from fastapi.responses import FileResponse

app = FastAPI()

@app.get("/")
def root():
    return FileResponse("public/index.html", 
                        filename="mainpage.html", 
                        media_type="application/octet-stream")

Загрузка файлов в веб-приложении на FastAPI и python
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850