我试图通过Python的Apache服务器在Web浏览器中显示图像文件。我正在使用:
windows 7
apache http server 2.2
python 2.7
httpd.conf中的配置:
DocumentRoot "C:/Apache2.2/htdocs"
RewriteRule ^images/(.+)$ /imagetest.py?img=$1 [QSA,L]
htdocs文件夹下的 imagetest.py
:
import cgitb; cgitb.enable()
import cgi
form = cgi.FieldStorage()
imgName = form.getvalue("img")
print "Content-type: image/jpeg"
print
print file(r"C:/imageFolder/" + imgName, "rb").read()
# Also tried
# sys.stdout.write( "Content-type: image/jpeg\n\n" + file("C:/imageFolder/" + imgName, "rb").read() )
# instead of "print"s above
http://localhost/images/0001.jpg
网址给出;
- Firefox上出现The image cannot be displayed because it contains errors
错误,
- Chrome没有任何内容
但在这两种情况下,使用http状态代码200获取图像(大约1 MB)(使用Firebug查看)
有什么建议吗?
另外,这样做的方式是正确的吗?我决定使用cgi,因为这个服务器只会间接地提供图像和一些视频文件(即通过python脚本)。我的意思是,那里没有复杂的操作。但是,此服务器应该快速可靠地处理许多请求。感谢。
答案 0 :(得分:2)
file.read()
不保证读取整个文件。使用shutil.copyfileobj()
将文件内容复制到sys.stdout
。
或者,更好的是,启用并使用mod_xsendfile。