Python - Flask:根目录外的静态文件夹

Python - Flask: Static folder outside root directory

只是为了好玩,我正在尝试了解如何使用 PythonFlask 创建网站。该网站必须 运行 在我自己的计算机上,我将是唯一的客户。到目前为止,我已经完成了大部分我想做的事情,但现在我遇到了一个我无法解决的技术问题。

在客户端,我想显示服务器返回的图像。在 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 命令会创建文件夹,但您已经有一些了。