各种子文件夹中的烧瓶图像
Flask Images in Various Subfolders
我有一个简单的 Flask 网络应用程序,它为每个用户存储小型 PDF/JPEG。由于文件对每个用户都是唯一的,我不想像 flask 要求的那样简单地将它们存储在“静态”文件夹中。相反,我有一个“用户”文件夹,其中为每个用户创建了一个子文件夹并存储了他们的文件。
我希望能够进行以下操作,但是图片不显示:
{% block main %}
<img src="/users/bob/test.JPG"
{% endblock %}
但是,如果我将相同的 test.JPG 保存在静态中并使用以下内容,它确实有效:
{% block main %}
<img src="/static/test.JPG"
{% endblock %}
我的文件结构是:
ProjectFolder
static
styles.css
templates
index.html
...
users
bob
image.jpg
...
sam
...
venv
app.py
helpers.py
Flask默认只支持从static文件夹下载静态文件
但是,如果您添加自己的端点,则可以从您选择的文件夹下载文件。出于安全原因,您应该确保对文件系统的某些区域的访问受到限制。为此,我还建议使用 instance path 的子目录。因此,这些文件与您的应用程序是分开的。
import os
from flask import Flask
from flask import send_from_directory
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = os.path.join(app.instance_path, 'users')
try:
os.makedirs(app.config['UPLOAD_FOLDER'])
except OSError:
pass
@app.route('/users/<path:filename>')
def download(filename):
return send_from_directory(
app.config['UPLOAD_FOLDER'],
filename
)
要请求其中一个文件,您可以使用 url_for
或直接指定路径。
<img src="{{ url_for('.download', filename='bob/image.jpg') }}" />
我有一个简单的 Flask 网络应用程序,它为每个用户存储小型 PDF/JPEG。由于文件对每个用户都是唯一的,我不想像 flask 要求的那样简单地将它们存储在“静态”文件夹中。相反,我有一个“用户”文件夹,其中为每个用户创建了一个子文件夹并存储了他们的文件。
我希望能够进行以下操作,但是图片不显示:
{% block main %}
<img src="/users/bob/test.JPG"
{% endblock %}
但是,如果我将相同的 test.JPG 保存在静态中并使用以下内容,它确实有效:
{% block main %}
<img src="/static/test.JPG"
{% endblock %}
我的文件结构是:
ProjectFolder
static
styles.css
templates
index.html
...
users
bob
image.jpg
...
sam
...
venv
app.py
helpers.py
Flask默认只支持从static文件夹下载静态文件
但是,如果您添加自己的端点,则可以从您选择的文件夹下载文件。出于安全原因,您应该确保对文件系统的某些区域的访问受到限制。为此,我还建议使用 instance path 的子目录。因此,这些文件与您的应用程序是分开的。
import os
from flask import Flask
from flask import send_from_directory
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = os.path.join(app.instance_path, 'users')
try:
os.makedirs(app.config['UPLOAD_FOLDER'])
except OSError:
pass
@app.route('/users/<path:filename>')
def download(filename):
return send_from_directory(
app.config['UPLOAD_FOLDER'],
filename
)
要请求其中一个文件,您可以使用 url_for
或直接指定路径。
<img src="{{ url_for('.download', filename='bob/image.jpg') }}" />