tar文件并使用flask app下载

时间:2016-08-27 14:49:16

标签: python flask

我有一个tex文件和三个图像,我希望用户可以单击一个按钮并下载所有这三个。如果四个文件作为一个tar文件,那将是理想的。我的下载现在如下工作

@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

这适用于tex文件,但是如何在烧瓶应用程序中查找文件并发送tar文件呢?

编辑:好的,感谢下面的评论我提出了这个代码

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()

但是我现在如何使用浏览器下载该tar文件?

1 个答案:

答案 0 :(得分:1)

你应该使用Flask为此提供的send_from_directory方法=)这是你正在做的事情的完美用例。

你可以做的是这样的事情:

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)

这将以干净的方式处理所有下载位。