Для отправки файлов из приложения FastAPI применяется класс FileResponse - наследник класса Response.
Допустим, у нас есть следующий проект:
Пусть в проекте в папке 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. В этом случае мы можем установить для параметра 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")