Python 如何让WSGI.py以静态html格式提供图像?
为非营利组织管理基于Python(wsgi)的站点&出于历史原因,我们希望从一个子域提供旧的(静态)HTML 以下是wsgi.py: (请注意,html/css文件位于static/文件夹中,其他文件位于static/的子文件夹中) (这为应用的所有文本和样式提供服务,但为图像提供alt文本)Python 如何让WSGI.py以静态html格式提供图像?,python,image,jpeg,wsgi,Python,Image,Jpeg,Wsgi,为非营利组织管理基于Python(wsgi)的站点&出于历史原因,我们希望从一个子域提供旧的(静态)HTML 以下是wsgi.py: (请注意,html/css文件位于static/文件夹中,其他文件位于static/的子文件夹中) (这为应用的所有文本和样式提供服务,但为图像提供alt文本) def应用程序(环境,启动响应): #一些用于检查传入内容的调试查询: 如果环境[“查询字符串”]=“环境”: 启动_响应('200正常',[('Content-Type', 'text/html;cha
def应用程序(环境,启动响应):
#一些用于检查传入内容的调试查询:
如果环境[“查询字符串”]=“环境”:
启动_响应('200正常',[('Content-Type',
'text/html;charset=utf-8')])
返回[“”,
"环境",,
报告主任(环境),
""]
如果环境[“查询字符串”]=“请求”:
启动_响应('200正常',[('Content-Type',
'text/html;charset=utf-8')])
返回[“”,
“传入请求转储”,
“脚本名称:”+env[“脚本名称”]+“
”,
“路径信息:”+env[“路径信息”]+“
”,
“查询字符串:”+env[“查询字符串”]+“
”,
""]
#常规服务器代码(运行正常):
尝试:
如果env[“PATH_INFO”]==“/”:#根,没有尾随“/”
htmlfile=open(“static/index.html”)
启动_响应('200正常',[('Content-Type',
'text/html;charset=utf-8')])
返回[htmlfile.read()]
elif env[“路径信息”].endswith(“.html”):
htmlfile=open(“静态”+env[“路径信息”])#
启动_响应('200正常',[('Content-Type',
'text/html;charset=utf-8')])
返回[htmlfile.read()]
elif env[“路径信息”].endswith(“.css”):
cssfile=open(“静态”+env[“路径信息”])#
启动_响应('200正常',[('Content-Type',
'text/css;charset=utf-8')])
返回[cssfile.read()]
#这将生成“内部服务器错误:”
elif env[“路径信息”].endswith(“.jpg”)或
env[“路径信息”].endswith(“.JPG”):
JPEG文件=打开(“静态”+env[“路径信息”])#
jpegdata=jpegfile.read()
开始响应('200 OK',[('Content-Type','image/jpeg'),
('Accept-Ranges','bytes'),
('Content-Length',str(len(jpegdata)),
(“连接”、“关闭”))
返回[JPEG数据]
例外情况除外,如e:
返回['Oops',
“无法读取服务器上的文件!”]
--AFAICS WSGI应用程序必须返回包含字符串的iterable;图像是字节对象,但服务器运行的是Python 2.7,&“bytes”是“string”的别名,所以这不应该是个问题。在这种情况下,我找不到任何有关编码的信息&HTTP处理八位字节。我尝试了各种各样的变体&用谷歌搜索了几天,但仍然卡住了。我怎样才能让这个愚蠢的东西为一个形象服务呢?这一定足够了
def application(environ, start_response):
data = open('image.jpg', 'rb').read()
start_response('200 OK', [('content-type': 'image/jpeg'),
('content-length', str(len(data)))])
return [data]
也许错误不是你想的那样。检查Apache的日志文件中是否有错误-/var/log/apache2/error.log(如果您使用的是Apache)好的,这是一个单独的问题:Python编译器在测试中遇到了“or”问题。我通过使用'env[“PATH_INFO”].lower()修复了这个问题 感谢您的回复, Ed这可能会帮助您:
def application(environ, start_response):
data = open('image.jpg', 'rb').read()
start_response('200 OK', [('content-type': 'image/jpeg'),
('content-length', str(len(data)))])
return [data]