【问题标题】:Download File From Another Directory In Flask从 Flask 中的另一个目录下载文件
【发布时间】:2017-01-24 13:53:44
【问题描述】:

我是 Flask 的新手。我正在尝试制作 /var/ 目录文件的下载列表,但是 我找不到任何方法来制作这个链接。 任何文件都可以在这个目录中,所以 tempfile 可以解决这个问题。 我不知道该文件,所以我无法在烧瓶目录中复制文件, 谁能告诉我如何为这样的文件制作下载链接?

【问题讨论】:

  • 非常感谢。我尝试 send_file 但我无法使其工作,但在您的建议之后我使用 send_from_directory 并且这可以按我的意愿工作。非常感谢

标签: python linux flask sendfile


【解决方案1】:

我从未使用过烧瓶,但对 Django 有一些经验。 通过快速查看烧瓶文档 (rendering_templates),您必须将上下文变量传递给渲染函数,然后将其添加到 jinja 模板中。

我还建议指定一个不同的文件夹来放置下载,因为让用户访问您的 /var/ 文件夹可能会带来安全问题。

见下文:

import os

from flask import Flask, render_template

app = Flask(__name__)

dloads_dir = '/var/www/mysite/downloads/'
dloads = os.listdir(dloads_dir).sort()
dloads_src = ['/downloads/{}'.format(i) for i in dloads]

@app.route('/Downloads')
def list_downloads():

    return render_template('downloads.html', dloads=dloads, dloads_src=dloads_src)

然后在html(应该说是Jinja2)模板中:

<!doctype html>
<title>Hello from Flask</title>
{% for file in dloads %}
    <a href="{{ dloads_src[loop.index0] }}" download>{{ file }}</a>
{% endfor %}
</html>

Here's where I found the loop.index method

(1) 编辑:修复了我的错误 html

【讨论】:

    猜你喜欢
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多