Функция send_from_directory
Функция send_from_directory применяется для
безопасной отдачи файла из заданной папки. Первым
параметром передаётся директория, вторым - имя файла
внутри неё. Функция защищает от выхода за пределы
каталога, что делает её безопасной альтернативой
ручному склеиванию путей.
Дополнительно можно передать именованный параметр
as_attachment, чтобы браузер скачивал файл,
а не отображал его, и параметр download_name,
задающий имя файла при скачивании.
Синтаксис
send_from_directory(directory, path, **kwargs)
Пример
Давайте отдадим файл 'article.txt' из папки
'files':
from flask import Flask, send_from_directory
app = Flask(__name__)
@app.route('/file')
def get_file():
return send_from_directory('files', 'article.txt')
Результат выполнения кода для адреса /file
при наличии файла:
"содержимое файла article.txt"
Пример
Давайте принудительно скачаем файл, передав параметр
as_attachment:
from flask import Flask, send_from_directory
app = Flask(__name__)
@app.route('/download')
def download_file():
return send_from_directory(
'files',
'article.txt',
as_attachment=True
)
Результат выполнения кода для адреса /download
- браузер скачивает файл 'article.txt'.
Пример
Давайте зададим своё имя файла при скачивании через
параметр download_name:
from flask import Flask, send_from_directory
app = Flask(__name__)
@app.route('/download')
def download_file():
return send_from_directory(
'files',
'article.txt',
as_attachment=True,
download_name='hello.txt'
)
Результат выполнения кода для адреса /download
- браузер скачивает файл под именем 'hello.txt'.
Пример
Давайте отдадим файл, имя которого приходит из URL:
from flask import Flask, send_from_directory
app = Flask(__name__)
@app.route('/files/<name>')
def get_named_file(name):
return send_from_directory('files', name)
Результат выполнения кода для адреса
/files/article.txt:
"содержимое файла article.txt"
Смотрите также
-
функцию
send_file,
которая отдаёт файл по прямому пути -
функцию
secure_filename,
которая очищает имя файла от опасных символов -
функцию
send_from_directory,
которая отдаёт файл из заданной директории -
раздел
static,
посвящённый отдаче статических файлов