提供二进制文件

时间:2017-05-20 17:24:01

标签: python html flask

我有以下Flask应用程序:

@app.route('/')
def serve_index():
    return render_template('index.html')

@app.route('/binary/')
def serve_binary():
    file_name, file_path = generate_binary()
    return send_file(file_path, attachment_filename = file_name, as_attachment=True)

如果我转到localhost/,我会按预期获得index.html。

如果我转到localhost/binary/,我会按预期获得二进制文件。

generate_binary()是我编写的Python脚本,它生成二进制文件,将其存储在Flask有权访问的文件夹中,并返回文件名以及文件路径。)

现在我想在index.html中写一个链接,让我下载我得到的二进制文件,如果我访问localhost/binary/

我的index.html如下所示:

<!DOCTYPE html>
<html>
<body>
<a href="localhost/binary/" target="blank">Link to binary</a>
</body>
</html>

但是,如果我访问localhost/并点击Link to binary链接,我会转到localhost/binary/,但必须重新加载此页面才能获取二进制文件。

我想要的是在不离开index.html页面的情况下获取文件。

1 个答案:

答案 0 :(得分:0)

localhost/binary相对路径,而不是完整的网址。使用以下之一:

  • {{ url_for('serve_binary') }} - 请求Flask生成网址
  • http://localhost/binary - 主机名为
  • 的绝对网址
  • /binary - 仅限绝对路径

接下来,您要求浏览器在名为blank的新窗口或选项卡中打开下载。这有两个问题;打开新的未命名窗口或标签的正常名称是_blank(请注意下划线),对于下载,您不想打开全新的标签。删除那里的target="..."属性。