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

时间:2018-12-29 15:07:37

标签: python flask wamp

仅出于娱乐目的,我试图了解如何使用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:网址必须以斜杠开头。

我在这里看到了很多类似的问题,但是不幸的是,我无法看到如何将答案用于特定问题。我是否可以以一种用户可以要求说<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及其子目录中。但是,当我们在<img src="http://localhost/genealogie/documenten/doc1064.jpg">文档中包含<img src="http://localhost/adressen/doc5127.jpg">html时,尽管实际上它们位于WAMP的外面,甚至在不同的驱动器上,但实际上都能很好地显示两个图像。所以我的问题是:我们也可以用FLASK来做到这一点吗?

1 个答案:

答案 0 :(得分:0)

所以您需要使用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

换句话说,您想在代码中打开图像(函数,类等),然后对图像进行任何所需的操作。例如,将其返回给用户。

我个人会尝试使用类似这样的东西:

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用于分层组织网络,主要用于处理组织结构(域,子域)。另一方面,文件服务器可以通过很多方式进行结构化。通常,您要代表文件的性质和/或文件的年龄。

顺便说一句,mkdir命令创建了文件夹,但是您已经有了一些文件夹。