Невозможно отобразить изображение в веб-браузере, предоставленном Python через Apache Server - PullRequest
0 голосов
/ 07 августа 2011

Я пытаюсь отобразить файл изображения в веб-браузере через сервер Apache от Python. Я использую:
Windows 7
http сервер apache 2.2
питон 2,7

Конфигурация в httpd.conf:

DocumentRoot "C:/Apache2.2/htdocs"
RewriteRule ^images/(.+)$       /imagetest.py?img=$1 [QSA,L]

imagetest.py в папке htdocs:

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

URL http://localhost/images/0001.jpg дает;
- The image cannot be displayed because it contains errors ошибка в Firefox,
- ничего в Chrome.
Но в обоих случаях изображение извлекается (около 1 МБ) с кодом состояния http 200 (выглядит с помощью Firebug).
Есть предложения?
Кроме того, это правильный способ делать такие вещи? Я решил использовать cgi, потому что этот сервер будет обслуживать только изображения и некоторые видеофайлы косвенно (а именно через скрипт на python). Я имею в виду, никаких сложных операций там. Однако этот сервер должен обрабатывать многие запросы быстро и надежно. Благодаря.

1 Ответ

2 голосов
/ 07 августа 2011

file.read() - это , а не , что гарантирует чтение всего файла.Используйте shutil.copyfileobj() для копирования содержимого файла в sys.stdout.

Или, что еще лучше, включите и используйте mod_xsendfile .

...