如何从Flask下载文件并在之后渲染模板?

时间:2017-07-27 10:36:27

标签: python html amazon-s3 flask boto3

在Flask中,我希望用户能够使用Boto从S3存储桶下载文件。当然,如果Flask从S3下载内容,它会将文件存储在服务器上。但是,如果他们单击下载按钮,我希望将该文件下载到用户计算机。那可能吗?我的想法如下。单击下载按钮时,Flask从S3获取文件并将其存储在服务器上,之后用户计算机将下载该文件。之后,服务器上的文件将被删除。请告诉我是否有更好的方法。如果我这样做就行了。不幸的是,我需要在下载文件后再次渲染我的仪表板,因此我无法返回文件。

烧瓶中:

@app.route('/download')
@login_required
def dowloadfile():
    try:
        #Boto3 downloading the file file.csv here
        return send_file('file.csv', attachment_filename='file.csv')
    except Exception as ermsg:
        print(ermsg)
        return render_template('dashboard.html', name=current_user.username, ermsg=ermsg)

HTML:

<a href="./download" style="position:absolute; margin-left:10px; margin-top:5px; margin-bottom:10px;"><button class="buttonstyle" onclick="showImage();">Download</button></a>

问题是,当点击下载按钮时,会显示一个全屏图像,这是我的加载屏幕。完成此功能并呈现新的html后,此加载屏幕将消失。使用上面的代码,即使文件被下载到用户计算机,加载屏幕也会出现并永久保留。你怎么能解决这个问题?

0 个答案:

没有答案