ディレクトリ内のファイルのリストを表示するページがあります。ユーザーが[ダウンロード]ボタンをクリックすると、これらのファイルはすべて1つのファイルに圧縮され、ダウンロードできるようになります。ボタンがクリックされたときにこのファイルをブラウザに送信する方法と、現在のページをリロードする(または別のページにリダイレクトする)方法を知っていますが、同じ手順で両方を行うことは可能ですか?または、ダウンロードリンクを使用して別のページにリダイレクトする方が理にかなっていますか?
私のダウンロードはFlaskAPIで開始されますsend_from_directory
。関連するテストコード:
@app.route('/download', methods=['GET','POST'])
def download():
error=None
# ...
if request.method == 'POST':
if download_list == None or len(download_list) < 1:
error = 'No files to download'
else:
timestamp = dt.now().strftime('%Y%m%d:%H%M%S')
zfname = 'reports-' + str(timestamp) + '.zip'
zf = zipfile.ZipFile(downloaddir + zfname, 'a')
for f in download_list:
zf.write(downloaddir + f, f)
zf.close()
# TODO: remove zipped files, move zip to archive
return send_from_directory(downloaddir, zfname, as_attachment=True)
return render_template('download.html', error=error, download_list=download_list)
更新:回避策として、ボタンをクリックして新しいページをロードしています。これにより、ユーザーsend_from_directory
は更新されたリストに戻る前に(を使用して)ダウンロードを開始できます。