Python - Flask:根目录外的静态文件夹
Python - Flask: Static folder outside root directory
只是为了好玩,我正在尝试了解如何使用 Python
和 Flask
创建网站。该网站必须 运行 在我自己的计算机上,我将是唯一的客户。到目前为止,我已经完成了大部分我想做的事情,但现在我遇到了一个我无法解决的技术问题。
在客户端,我想显示服务器返回的图像。在 my __init__.py
中,我放置了 app = Flask(__name__, static_url_path='/static')
,在我的 html 文档中放置了 <img src="/static/images/2012035.jpg" height="150px">
。这就像一个魅力。
但实际上,我的图片在应用程序目录之外的目录d:\genealogie\documenten
中,我不想将超过2000个文件复制到目录static/images
。
我试过了:
documenten = "d:\genealogie\documenten"
os.mkdir(documenten)
给出 WinError 183
因为该目录已经存在。
我也试过:
documenten = "d:\genealogie\documenten"
app = Flask(__name__, static_url_path='documenten')
给出 ValueError
: url 必须以斜杠开头。
我在这里看到了很多类似的问题,但不幸的是,我无法看到如何将答案用于我的特定问题。我能否以这样的方式配置网站,即我作为用户可以要求说 <img src="documenten/2012035.jpg" height="150px">
,也许带有某些或其他 localhost
前缀?非常感谢任何帮助。
编辑
我想做的是让服务器访问服务器目录之外的目录。也许我可以通过在 WAMP
中展示这可以多么容易地完成来说明这一点。在那里我们只需要向文件 httpd.conf
添加几行。例如:
Include "C:/wamp64/alias/*"
Alias /adressen "d:/adressen"
<Directory "d:/adressen">
Options Indexes FollowSymLinks Multiviews
AllowOverride all
Require all granted
</Directory>
Alias /genealogie "d:/genealogie"
<Directory "d:/genealogie">
Options Indexes FollowSymLinks Multiviews
AllowOverride all
Require all granted
</Directory>
服务器及其所有文件都在 c:/wamp64
及其子目录中。但是当我们在 html
文档中包含 <img src="http://localhost/genealogie/documenten/doc1064.jpg">
和 <img src="http://localhost/adressen/doc5127.jpg">
时,两个图像都可以很好地显示,尽管事实上它们实际上位于 WAMP
之外,甚至在不同的驱动器上。所以我的问题是:我们也可以使用 FLASK
来做到这一点吗?
所以您需要用 python 代码打开文件夹,提取正确的图片并将其发送给您的用户?
您可以使用
file = "d:\genealogie\documenten\your_file_name" #you may consider a path library so you can do this in windows or Linux
os.open(file) #you should really use a image library here. open is just a placeholder
换句话说,您想在代码中打开图像(函数,class,随便什么),然后对图像做任何您需要做的事情。例如返回给用户。
我个人会尝试使用这样的东西:
from flask import send_file
file = "d:\genealogie\documenten\your_file_name" #you may consider a path library so you can do this in windows or Linux
return send_file(file, mimetype='image/jpg') #in case of jpg image, you may opt to not use the mimetype
你不能用
做到这一点
documenten = "d:\genealogie\documenten"
app = Flask(__name__, static_url_path='documenten')
但是为什么呢?
基本上 static_url_path
是用户在浏览器中输入的 url。这与您在服务器上的文件夹结构无关。哎呀,你甚至不需要在你的服务器上有文件夹。
您的 Internet 呈现的结构不必与您的文件系统的结构相关。基本上是两个截然不同的世界在这里碰撞。
URL 用于分层构建网络,主要处理组织结构(域、子域)。另一方面,文件服务器可以以多种方式构建。通常你想要表示文件的性质 and/or 文件的年龄。
顺便说一下,mkdir
命令会创建文件夹,但您已经有一些了。
只是为了好玩,我正在尝试了解如何使用 Python
和 Flask
创建网站。该网站必须 运行 在我自己的计算机上,我将是唯一的客户。到目前为止,我已经完成了大部分我想做的事情,但现在我遇到了一个我无法解决的技术问题。
在客户端,我想显示服务器返回的图像。在 my __init__.py
中,我放置了 app = Flask(__name__, static_url_path='/static')
,在我的 html 文档中放置了 <img src="/static/images/2012035.jpg" height="150px">
。这就像一个魅力。
但实际上,我的图片在应用程序目录之外的目录d:\genealogie\documenten
中,我不想将超过2000个文件复制到目录static/images
。
我试过了:
documenten = "d:\genealogie\documenten"
os.mkdir(documenten)
给出 WinError 183
因为该目录已经存在。
我也试过:
documenten = "d:\genealogie\documenten"
app = Flask(__name__, static_url_path='documenten')
给出 ValueError
: url 必须以斜杠开头。
我在这里看到了很多类似的问题,但不幸的是,我无法看到如何将答案用于我的特定问题。我能否以这样的方式配置网站,即我作为用户可以要求说 <img src="documenten/2012035.jpg" height="150px">
,也许带有某些或其他 localhost
前缀?非常感谢任何帮助。
编辑
我想做的是让服务器访问服务器目录之外的目录。也许我可以通过在 WAMP
中展示这可以多么容易地完成来说明这一点。在那里我们只需要向文件 httpd.conf
添加几行。例如:
Include "C:/wamp64/alias/*"
Alias /adressen "d:/adressen"
<Directory "d:/adressen">
Options Indexes FollowSymLinks Multiviews
AllowOverride all
Require all granted
</Directory>
Alias /genealogie "d:/genealogie"
<Directory "d:/genealogie">
Options Indexes FollowSymLinks Multiviews
AllowOverride all
Require all granted
</Directory>
服务器及其所有文件都在 c:/wamp64
及其子目录中。但是当我们在 html
文档中包含 <img src="http://localhost/genealogie/documenten/doc1064.jpg">
和 <img src="http://localhost/adressen/doc5127.jpg">
时,两个图像都可以很好地显示,尽管事实上它们实际上位于 WAMP
之外,甚至在不同的驱动器上。所以我的问题是:我们也可以使用 FLASK
来做到这一点吗?
所以您需要用 python 代码打开文件夹,提取正确的图片并将其发送给您的用户?
您可以使用
file = "d:\genealogie\documenten\your_file_name" #you may consider a path library so you can do this in windows or Linux
os.open(file) #you should really use a image library here. open is just a placeholder
换句话说,您想在代码中打开图像(函数,class,随便什么),然后对图像做任何您需要做的事情。例如返回给用户。
我个人会尝试使用这样的东西:
from flask import send_file
file = "d:\genealogie\documenten\your_file_name" #you may consider a path library so you can do this in windows or Linux
return send_file(file, mimetype='image/jpg') #in case of jpg image, you may opt to not use the mimetype
你不能用
做到这一点documenten = "d:\genealogie\documenten"
app = Flask(__name__, static_url_path='documenten')
但是为什么呢?
基本上 static_url_path
是用户在浏览器中输入的 url。这与您在服务器上的文件夹结构无关。哎呀,你甚至不需要在你的服务器上有文件夹。
您的 Internet 呈现的结构不必与您的文件系统的结构相关。基本上是两个截然不同的世界在这里碰撞。
URL 用于分层构建网络,主要处理组织结构(域、子域)。另一方面,文件服务器可以以多种方式构建。通常你想要表示文件的性质 and/or 文件的年龄。
顺便说一下,mkdir
命令会创建文件夹,但您已经有一些了。