我需要从各种对象存储桶下载图像对象,并通过Django Rest Framework将其发送给用户。
我有类似的东西:
if request.method == 'GET':
# Get object using swiftclient
conn = swiftclient.client.Connection(**credentials)
container, file = 'container_name', 'object_name'
_, data = conn.get_object(container, file)
# Send object to the browser
return Response(data, content_type="image/png")
data
变量包含字节类型。
测试时我收到错误:
'utf-8' codec can't decode byte 0x89 in position 0: invalid start byte
这个问题可以解决什么问题?
答案 0 :(得分:6)
如果您希望将图片直接通过Django Rest Framework传递给用户,那么使用HttpResponse
可能更合适。
from django.http import HttpResponse
...
return HttpResponse(data, content_type="image/png")
Django Rest Framework自己的Response
将尝试渲染二进制数据,这可能会导致您看到的编码问题。
答案 1 :(得分:1)
您需要导入base64并需要将字节数据转换为base64编码格式,以解决该问题。
import base64
data = base64.b64encode(data)
==== OR =====
我尊重@Will Keeling的回答,并希望在我的帖子中也有。
from django.http import HttpResponse
return HttpResponse(data, content_type="image/png")