使用 django-sslserver 从 Django 视图返回图像
Returning an image from a Django view using django-sslserver
我正在尝试 return 使用 django-sslserver 和 Pillow 时来自 Django 1.11 视图的图像。这是我为测试制作的最小视图。
def get_image(request):
img = Image.open('oh_noes_cat.png', mode='r')
response = HttpResponse(content_type='image/png')
img.save(response, 'png')
return response
在我的模板中,我使用:
<img src={% url "get_image" %} />
在urls.py中,我使用:
url(r'^get_image.png', get_image, name='get_image')
图像响应在 Django runserver 上运行良好,但在 django-sslserver 和来自 django-extensions 的 runserver_plus 下均失败。我在 Chrome 中看到的是损坏的图像图标和错误 "ERR_CONTENT_LENGTH_MISMATCH".
使用 django-sslserver 时出现错误:
[26/Dec/2017 18:55:39] "GET /get_image.png HTTP/1.1" 200 0
Traceback (most recent call last):
File "/usr/lib/python3.5/wsgiref/handlers.py", line 138, in run
self.finish_response()
File "/usr/lib/python3.5/wsgiref/handlers.py", line 180, in finish_response
self.write(data)
File "/usr/lib/python3.5/wsgiref/handlers.py", line 279, in write
self._write(data)
File "/usr/lib/python3.5/wsgiref/handlers.py", line 453, in _write
result = self.stdout.write(data)
File "/usr/lib/python3.5/socket.py", line 593, in write
return self._sock.send(b)
File "/usr/lib/python3.5/ssl.py", line 861, in send
return self._sslobj.write(data)
File "/usr/lib/python3.5/ssl.py", line 586, in write
return self._sslobj.write(data)
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:1844)
[26/Dec/2017 18:55:39] "GET /get_image.png HTTP/1.1" 500 59
有谁知道如何在 Django 开发环境中使用 django-sslserver 或支持 SSL 的类似解决方案使图像响应工作?我进行了搜索,但未能找到遇到此特定问题的人的示例。
谢谢
由于不完全清楚 Image.save() 在这种情况下的作用,您可以尝试这样做吗?
def get_image(request):
image_data = open('oh_noes_cat.png', mode='r').read()
return HttpResponse(image_data, content_type="image/png")
我正在尝试 return 使用 django-sslserver 和 Pillow 时来自 Django 1.11 视图的图像。这是我为测试制作的最小视图。
def get_image(request):
img = Image.open('oh_noes_cat.png', mode='r')
response = HttpResponse(content_type='image/png')
img.save(response, 'png')
return response
在我的模板中,我使用:
<img src={% url "get_image" %} />
在urls.py中,我使用:
url(r'^get_image.png', get_image, name='get_image')
图像响应在 Django runserver 上运行良好,但在 django-sslserver 和来自 django-extensions 的 runserver_plus 下均失败。我在 Chrome 中看到的是损坏的图像图标和错误 "ERR_CONTENT_LENGTH_MISMATCH".
使用 django-sslserver 时出现错误:
[26/Dec/2017 18:55:39] "GET /get_image.png HTTP/1.1" 200 0
Traceback (most recent call last):
File "/usr/lib/python3.5/wsgiref/handlers.py", line 138, in run
self.finish_response()
File "/usr/lib/python3.5/wsgiref/handlers.py", line 180, in finish_response
self.write(data)
File "/usr/lib/python3.5/wsgiref/handlers.py", line 279, in write
self._write(data)
File "/usr/lib/python3.5/wsgiref/handlers.py", line 453, in _write
result = self.stdout.write(data)
File "/usr/lib/python3.5/socket.py", line 593, in write
return self._sock.send(b)
File "/usr/lib/python3.5/ssl.py", line 861, in send
return self._sslobj.write(data)
File "/usr/lib/python3.5/ssl.py", line 586, in write
return self._sslobj.write(data)
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:1844)
[26/Dec/2017 18:55:39] "GET /get_image.png HTTP/1.1" 500 59
有谁知道如何在 Django 开发环境中使用 django-sslserver 或支持 SSL 的类似解决方案使图像响应工作?我进行了搜索,但未能找到遇到此特定问题的人的示例。
谢谢
由于不完全清楚 Image.save() 在这种情况下的作用,您可以尝试这样做吗?
def get_image(request):
image_data = open('oh_noes_cat.png', mode='r').read()
return HttpResponse(image_data, content_type="image/png")