使用Flask从静态以外的dirs提供文件

时间:2017-08-11 02:19:05

标签: python flask

我正在制作上传/下载服务只是为了好玩,但我很难提供静态目录之外的文件,这会导致问题,因为任何人都可以访问www.mysite.com/static并查看内容。

这是我到目前为止所拥有的。原谅我网络存储的丑陋路径:)

if not os.path.exists('\\ATTILA\\Development\\GIT\\MyCloud\\static\\'+ session['username']):
        os.makedirs('\\\\ATTILA\\Development\\GIT\\MyCloud\\static\\'+ session['username'])

    #Download links for all files
    pathing = []
    my_path = '\\\\ATTILA\\Development\\GIT\\MyCloud\\static\\'+ session['username'] + '\\'
    os.chdir('\\\\ATTILA\\Development\\GIT\\MyCloud\\static\\'+ session['username'])
    for myfile in glob.glob('*'):
        downs = my_path + myfile
        pathing.append(tuple([downs, myfile]))

在我的模板中,我有一个简单的for循环

{% for myfile, name in pathing %}
    <a href='{{ myfile }}' download>{{ name }}</a><br>
{% endfor %}

所以我的观点如下:

enter image description here

目前我的文件是可下载的,但是如果我将下载的文件路径更改为&#39; static&#39;之外的文件夹。那么我没有下载链接而是获得404错误,指向URL +文件路径,如此www.mysite.com\ATTILLA\Development\some_other_folder有任何建议吗?

1 个答案:

答案 0 :(得分:1)

如果您希望将应用程序投入生产,则需要使用nginx等解决方案来为静态文件提供服务。 通常在开发阶段Flask使用常规静态文件(css,js和另一个)自我。这是正常的。 如果你想隐藏一些私人数据或上传的文件,你需要使用这样的东西:

from flask import Flask, make_response
...
@app.route('/file_downloads/<filename>')
def file_downloads(filename):
    headers = {"Content-Disposition": "attachment; filename=%s" % filename}
    with open('../tmp/you_private_file.zip', 'r') as f:
        body = f.read()
    return  make_response((body, headers))