Загрузка файла колбы: имя файла сохраняется в течение сеанса - PullRequest
2 голосов
/ 31 мая 2019

У меня есть сайт фляги и веб-форма, которая генерирует файлы Excel.У меня проблема в том, что если я отправлю пользователя обратно в форму для повторной отправки, предыдущий файл с тем же именем и данными будет загружен, даже если в каталоге tmp создаются новые файлы.Итак, я думаю, что это связано с моей переменной сеанса.

Я добавляю метку времени к имени файла с помощью этой функции, чтобы убедиться, что имена файлов уникальны:

def rightnow():
    return dt.datetime.now().strftime("%m%d%y%h%m%S%f")

В маршрутах.py, вот вызов для загрузки:

@app.route('/download/', methods=['POST','GET'])
def download_file():
    output_file = session.get('new_file', None)
    r = send_file(output_file, attachment_filename=output_file, as_attachment=True)
    return r

Это код для скрипта, который генерирует файлы Excel:

new_file = 'output_' + rightnow() + '.xlsx'
writer = pd.ExcelWriter('tmp/' + new_file, engine='xlsxwriter')
df.to_excel(writer, sheet_name="data")      
writer.save()
session['new_file'] = 'tmp/' + new_file

Оператор загрузки со страницы шаблона:

<a class="button" href="{{url_for('download_file')}}">Download new data</a>

У меня есть кнопка «Отправить снова», привязанная к простому javascript

<button onclick="goBack()">Submit Again</button>
<script>//for "revise search" button
function goBack() {
    window.history.back();
}
</script>

Я играл с session.clear() безуспешно.

Как я могу удалить сеанс, когда пользователь нажимает кнопку «Отправить снова», чтобы сохранить имя сохраненного файла?

РЕДАКТИРОВАТЬ: я проверил переменные для имени файла и переменной сеанса иони идентичны и отличаются от имени файла, назначенного при загрузке.Например, файл с именем «output_May0554733504.xlsx» в сценарии, который я написал, - я вижу его в каталоге tmp.Но когда я иду, чтобы загрузить файл, имя файла отличается: 'output_May0536794357.xlsx'

Это другое имя файла не совпадает с именем другого файла в каталоге tmp.Любой файл, который я скачаю, будет 'output_May0536794357.xlsx'.

1 Ответ

2 голосов
/ 01 июня 2019

Если session.pop('new_file') не работает, вы можете попробовать session.modified = True для принудительного изменения сеанса.

...