Python flask send_from_directory()
мне нужно написать функцию, которая будет скачивать файлы с сервера и вот все работало отлично когда надо было скачивать по одному файлу я тогда использовал
@app.route('return_files/', methods=['GET','POST'])
def return_files(file)
return send_from_directory(directory="pdf", filename=file, as_attachment=True)
теперь мне нужно чтобы эта функция возвращала несколько файлов то-есть как-то так:
@app.route('return_files/', methods=['GET','POST'])
def return_files(files)
for file in files:
return send_from_directory(directory="pdf", filename=file, as_attachment=True)
этот app.route и вся функция выглядит очень абстрактно, суть в том что раньше когда я нажимал на кнопку 'скачать файл' он скачивался, теперь с большим количеством файлов это не проходит, как это можно решить?
Ответы (2 шт):
return прерывает выполнение функции с сразу возвращает результат. В вашем случае могу посоветовать два варианта:
- Завести список и
appendтуда каждый файл.@app.route('return_files/', methods=['GET','POST']) def return_files(files) file_list = [] for file in files: file_list.append(send_from_directory(directory="pdf", filename=file, as_attachment=True)) return file_list - Написать генератор для получения всех возможных файлов. Читайте про
yeldНу и советую немножко зарефакторить, потому что логика получения файлов, это не логика rout`ов
И да, обратите внимание на комментарий andreymal
В итоге я решил просто соединить файлы в один и вернуть его.
from PyPDF2 import PdfFileMerger
@app.route('return_files/', methods=['GET','POST'])
def return_files(files)
merger = PdfFileMerger()
for file in files:
merger.append(file)
merger.write("result.pdf")
merger.close()
return send_from_directory(directory="pdf", filename='result.pdf', as_attachment=True)