2016-08-27 3 views
1

Ich habe eine tex-Datei und drei Bilder und ich möchte, dass der Benutzer auf eine Schaltfläche klicken und alle drei herunterladen können. Es wäre ideal, wenn die vier Dateien als eine TAR-Datei wären. Mein Download funktioniert jetzt alstar Dateien und Download mit Kolben App

@app.route('/download_tex', methods=['GET', 'POST']) 
@login_required 
def download_tex(): 
    latext_text = render_template('get_lates.html') 

    filename = 'test' 
    response = make_response(latext_text) 
    response.headers["Content-Disposition"] = "attachment; filename=%s.tex" % filename 

    return response 

das funktioniert gut für die tex-Datei folgt, aber wie kann ich tar Dateien im Kolben App und die TAR-Datei stattdessen schicken?

EDIT: Ok dank den Kommentar unten ich mit diesem Code kam

latext_text = render_template('get_latex.html') 

latex_file = open(basedir + '/app/static/statistics/latex_%s.tex' % current_user.username, "w") 
latex_file.write(latext_text) 
latex_file.close() 

filename = 'tarfile_%s.tar.gz' % current_user.username 
filepath = basedir + '/app/static/statistics/%s' % filename 

tar = tarfile.open(filepath, "w:gz") 
tar.add(basedir + '/app/static/statistics/image1.png') 
tar.add(basedir + '/app/static/statistics/image2.png') 
tar.add(basedir + '/app/static/statistics/image3.png') 
tar.add(basedir + '/app/static/statistics/latex_%s.tex' % current_user.username) 
tar.close() 

aber wie kann ich jetzt, dass die TAR-Datei mit dem Browser herunterladen?

+0

http://stackoverflow.com/a/17081026/1005215 und https://gist.github.com/boris317/3693796 –

Antwort

1

Sie sollten die send_from_directory Methode verwenden, die Flask für diese bietet =) Es ist der perfekte Anwendungsfall für das, was Sie tun.

Was Sie tun können, ist so etwas wie dieses:

from flask import send_from_directory 

# code here ... 

filename = 'tarfile_%s.tar.gz' % current_user.username 
filedir = basedir + '/app/static/statistics/' 

# tar code here ... 

return send_from_directory(filedir, filename, as_attachment=True) 

, dass alle der Download-Bits für Sie in einer sauberen Art und Weise behandelt.