Вернуть изображение в браузер в Python, CGI-BIN - PullRequest
4 голосов
/ 07 июля 2010

Я пытаюсь настроить скрипт Python в cgi-bin, который просто возвращает заголовок с типом содержимого: image / png и возвращает изображение. Я попытался открыть изображение и вернуть его с print f.read(), но это не работает.

EDIT: код, который я пытаюсь использовать:

print "Content-type: image/png\n\n"
with open("/home/user/tmp/image.png", "r") as f:
    print f.read()

Это использует apache на сервере Ubuntu 10.04. Когда я загружаю страницу в Chrome, я получаю сломанное изображение, а когда я загружаю страницу в Firefox, я получаю The image http://localhost/cgi-bin/test.py" cannot be displayed, because it contains errors.

Ответы [ 2 ]

6 голосов
/ 07 июля 2010
  1. Вам может потребоваться открыть файл как "rb" (в средах на базе Windows это обычно так.
  2. Простая печать может не работать (так как добавляет '\ n' и прочее),лучше просто write до sys.stdout.
  3. Оператор print "Content-type: image/png\n\n" фактически печатает 3 новых строки (поскольку print автоматически добавляет один "\ n" в конце. Это может привести к поломке файла PNG.

Попробуйте:

sys.stdout.write( "Content-type: image/png\r\n\r\n" + file(filename,"rb").read() )
Для ответов HTML требуется возврат каретки, новая строка
0 голосов
/ 07 июля 2010

Включаете ли вы пустую строку после заголовка? Если нет, это не конец ваших заголовков!

print 'Content-type: image/png'<br/> print<br/> print f.read()<br/>

...