Для отправки файлов из приложения 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")