2014-11-05 2 views
0

Я разрешаю клиенту, который подключается к моему серверу python, чтобы попросить картинку. Я возвращаю ему фиксированный HTTP, который включает двоичные данные по следующему коду (игнорировать плохие identication):После отправки изображения клиенту я получаю тарабарщину вместо изображения

if os.path.isfile(PICROOT + pic_name): 
       with Image.open(PICROOT + pic_name) as curr_img: 
        sio = StringIO.StringIO() 

        if url[-3:] == 'jpg': 
         curr_format = 'JPEG' 
        else: 
         curr_format = url[-3:] 

        curr_img.save(sio, format=curr_format.upper()) 
        content = sio.getvalue() 
        sio.close() 

now = time.strftime("%c") 
reply = str(version) + " " + str(status) 
reply += " " + status_msg + '\r\n' 
reply += 'Date:' + now + '\r\n' 
reply += 'Server: Apache/2.0.52 (WindOS)\r\n' 
reply += 'Accept-Ranges: bytes\r\n' 
reply += 'Connection: close \r\n' 
reply += 'Content-Length: '''+str(len(content))+'\r\n' 
reply += 'Content-Type: text/html; charset=ISO-8859-1\r\n' 
reply += '\r\n' 
reply += str(content) 

return reply 

увы, я получаю только страницу бреды (данные на картинке) при тестировании его. Что я делаю неправильно и как это можно исправить?

+0

Привет, это выглядит например, вы пытаетесь переопределить HTTP. Пожалуйста, не делай этого. Используйте существующую веб-инфраструктуру (например, Flask, Pyramid, Django) и обслуживайте приложение через стандартный WSGI-совместимый сервер. –

+0

Определение упражнения в курсе заключается в реализации HTTP-сервера. –

ответ

1

Вы отправляете данные JPEG, но говорит браузеру, что вы отправляете HTML:

reply += 'Content-Type: text/html; charset=ISO-8859-1\r\n' 

Вы должны сказать клиенту вы отправляете изображение в формате JPEG вместо:

reply += 'Content-Type: image/jpg\r\n' 
Смежные вопросы