Параметр filename
Параметр filename применяется к классу
FileResponse и задаёт имя файла, которое
браузер предложит сохранить при скачивании ответа.
Первым параметром передаётся путь к файлу на диске,
а параметр filename переопределяет имя,
под которым файл будет отдан клиенту.
Если filename не указан, используется
имя исходного файла из пути.
Синтаксис
FileResponse(path, filename=None)
Пример
Давайте отдадим файл 'data.txt' под именем
'report.txt':
from fastapi import FastAPI
from fastapi.responses import FileResponse
app = FastAPI()
@app.get('/download')
def download():
return FileResponse('data.txt', filename='report.txt')
В заголовке ответа Content-Disposition появится
имя 'report.txt':
attachment; filename="report.txt"
Пример
Давайте отдадим файл без параметра filename
и сравним результат:
from fastapi import FastAPI
from fastapi.responses import FileResponse
app = FastAPI()
@app.get('/download')
def download():
return FileResponse('data.txt')
В заголовке ответа Content-Disposition появится
имя исходного файла:
attachment; filename="data.txt"
Пример
Давайте отдадим файл с русским именем и проверим, как FastAPI закодирует его в заголовке:
from fastapi import FastAPI
from fastapi.responses import FileResponse
app = FastAPI()
@app.get('/download')
def download():
return FileResponse('data.txt', filename='отчёт.txt')
FastAPI закодирует не-ASCII символы по стандарту
RFC 5987:
attachment; filename="report.txt"; filename*=UTF-8''%D0%BE%D1%82%D1%87%D1%91%D1%82.txt
Смотрите также
-
класс
FileResponse,
который отдаёт файл с диска в качестве ответа -
параметр
media_type,
который задаёт MIME-тип отдаваемого файла -
параметр
content_disposition_type,
который задаёт тип заголовка Content-Disposition -
класс
StreamingResponse,
который отдаёт данные потоком