Python-Flask:根目录外的静态文件夹
只是为了好玩,我试图了解如何使用Python-Flask:根目录外的静态文件夹,python,flask,wamp,Python,Flask,Wamp,只是为了好玩,我试图了解如何使用Python和Flask创建一个网站。该网站必须在我自己的电脑上运行,我将是唯一的客户。到目前为止,我得到了我想做的大部分工作,但现在我遇到了一个我无法解决的技术问题 在客户端,我想显示服务器返回的图像。在my\uuuu init\uuuuuuuuuupy中,我将app=Flask(\uuuu name\uuuuuuuuuu,static\uurl\u path='/static')放置在我的html文档中。这很有魅力 但事实上,我的图像位于d:\generalo
Python
和Flask
创建一个网站。该网站必须在我自己的电脑上运行,我将是唯一的客户。到目前为止,我得到了我想做的大部分工作,但现在我遇到了一个我无法解决的技术问题
在客户端,我想显示服务器返回的图像。在my\uuuu init\uuuuuuuuuupy
中,我将app=Flask(\uuuu name\uuuuuuuuuu,static\uurl\u path='/static')
放置在我的html文档
中。这很有魅力
但事实上,我的图像位于d:\generalogie\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必须以斜杠开头
我在这里看到了很多类似的问题,但不幸的是,我无法看到如何使用我的具体问题的答案。我是否可以这样配置网站:作为一个用户,我可以要求使用一些或其他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/alias/*”
别名/adressen“d:/adressen”
选项索引跟随符号链接多视图
允许超越所有
要求所有授权
别名/generalogie“d:/generalogie”
选项索引跟随符号链接多视图
允许超越所有
要求所有授权
服务器及其所有文件位于
c:/wamp64
及其子目录中。但是当我们将
和
包含在html
文档中时,这两个图像都能很好地显示出来,尽管它们实际上位于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
documenten = "d:\genealogie\documenten"
app = Flask(__name__, static_url_path='documenten')
换句话说,您希望在代码中打开映像(函数、类等),然后根据需要对映像执行任何操作。例如,将其返回给用户
我个人会尝试使用这样的方式:
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
你不能和我一起做这件事
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
documenten = "d:\genealogie\documenten"
app = Flask(__name__, static_url_path='documenten')
但是为什么呢?
基本上,静态url路径是用户进入浏览器的url。这与服务器上的文件夹结构无关。见鬼,你甚至不需要在你的服务器上有文件夹
internet呈现的结构与文件系统的结构无关。基本上,这是两个完全不同的世界在这里碰撞
URL用于按层次结构构建web,主要处理组织结构(域、子域)。另一方面,文件服务器的结构可以有很多种方式。通常,您希望表示文件的性质和/或文件的年代
顺便说一下,
mkdir
命令创建文件夹,但您已经有了一些 打开目录的想法很好,但是mkdir会创建一个文件夹。只需使用open或其他工具。为什么不将documenten
作为全局变量,并按照您在flask模板中的建议使用它。谢谢您的回答。我玩了一点os.open()
,但至今没有成功。此外,我的问题是,我想在服务器目录之外的html文档中打开图像。我对我的问题进行了编辑,使之更清晰。你为什么不能照原样传递图像呢。我修改了我的答案,没问题。把问题标为已回答。并反思URL与服务器文件系统的区别。这不是一个容易的话题。谢谢,这是解决问题的关键。当我想使服务器计算机上的所有目录文件(如d:\genelogy\documents
)对客户端可用时,我选择一个名称,如gendocs
,并向routes.py:
定义gendocs(文件名):
返回发送文件(“d:\genelogy\documents\”+文件名)
。现在在html文档中,我们可以使用类似
的结构。