Для создания эксель файла и его отправки клиенту через FastAPI, мы можем использовать модули openpyxl
и io
. Модуль openpyxl
предоставляет набор инструментов для работы с файлами формата Excel, а модуль io
предоставляет инструменты для работы с файлами в памяти.
Для начала, убедитесь, что у вас установлены необходимые пакеты с помощью команды:
pip install openpyxl fastapi
Импортируем необходимые модули:
import io from fastapi import FastAPI from fastapi.responses import StreamingResponse from openpyxl import Workbook
Создаем экземпляр FastAPI:
app = FastAPI()
В определенном пути, мы можем создать функцию-обработчик, которая будет создавать эксель файл, записывать в него данные и отправлять его клиенту:
@app.get("/download_excel") def download_excel(): # Создаем экземпляр Workbook wb = Workbook() # Получаем активный лист sheet = wb.active # Записываем данные в ячейки sheet["A1"] = "Hello" sheet["B1"] = "World" # Создаем файл в памяти stream = io.BytesIO() wb.save(stream) stream.seek(0) # Определяем имя файла filename = "example.xlsx" # Отправляем файл клиенту return StreamingResponse(stream, media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", headers={'Content-Disposition': 'attachment; filename=' + filename})
Теперь, когда вы запустите сервер с помощью uvicorn main:app
, вы сможете получить доступ к созданному эксель файлу, перейдя по адресу http://localhost:8000/download_excel
.
Обратите внимание, что в данном примере мы создаем простой эксель файл с одним листом и записываем в него данные "Hello" и "World". Вы можете изменить этот код, чтобы создать более сложные файлы с различными листами и данными.
Также обратите внимание, что мы используем StreamingResponse
из FastAPI для отправки файла клиенту методом потоковой передачи, что позволяет передать файл по частям и уменьшить возможные задержки при больших файлах.
Этот пример демонстрирует, как создать и отправить эксель файл с помощью BytesIO и FastAPI. Вы можете изменить его по вашему усмотрению, чтобы адаптировать его к своим конкретным потребностям.