У меня есть некоторые проблемы с подачей файлов с помощью фляги.
Во-первых, мое дерево файлов:
processedMain
--processed1
--processed2
--...
--processedN
В каждой папке у меня есть набор файлов, которые я представляю всем в таблице, гдеЯ поставил ссылку href с путем к каждому из файлов и передал его через функцию маршрута с возвратом send_file.
Проблема в том, что единственный способ, которым я смог заставить его работать, - это создать @ app.route для каждоговложенная папка жестко запрограммирована, например:
@app.route('/' + pathFits1[1] + '<id>', methods=['GET'])
def returnImg1(id):
return send_file(pathFits1[1] + id, as_attachment=True, attachment_filename=id)
@app.route('/' + pathFits1[2] +'<id>', methods=['GET'])
def returnImg2(id):
return send_file(pathFits1[2] + id, as_attachment=True, attachment_filename=id)
@app.route('/' + pathFits1[3] + '<id>', methods=['GET'])
def returnImg3(id):
return send_file(pathFits1[3] + id, as_attachment=True, attachment_filename=id)
где pathFits1 [i] - это путь к подпапке, а идентификатор передается, когда пользователь нажимает на файл в веб-таблице.
Проблема в том, что у меня естьмного подпапок, и это утомительно, чтобы создать @ app.route для каждого.Можно ли создать только один маршрут для каждой вещи?
PS Я совсем новичок в колбе, поэтому, если я забыл что-то сказать, скажите, пожалуйста, что я его заполню.
Решение
На самом деле это было невероятно просто.Как указал @ Dan.D, у flask есть конвертеры захваченных переменных, для меня это было все, что мне было нужно, поскольку моя переменная id уже содержит полный путь к файлу.Так что теперь это всего лишь 3 строки, которые заменяют весь пакет или дублированный код:
@app.route('/<path:id>')
def returnImg(id):
fileName = id.rsplit('/', 1)[-1]
return send_file(id, as_attachment=True, attachment_filename=fileName)
Где id - полный путь к файлу, path: - конвертер впуть и fileName - это имя файла, который пользователь будет загружать без пути в нем (все после последней косой черты)