Отправить файл через Django Rest
Мне нужно загрузить объект изображения из различных хранилищ объектов и отправить его пользователю через 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
Что может быть решением для этой проблемы?
2 ответа
Вам необходимо импортировать base64 и преобразовать байтовые данные в кодированный base64 формат, чтобы решить эту проблему.
import base64
data = base64.b64encode(data)
==== ИЛИ =====
Я уважаю ответ @Will Keeling и хотел бы, чтобы это тоже было в моем сообщении.
from django.http import HttpResponse
return HttpResponse(data, content_type="image/png")
Если вы хотите передать изображение прямо через Django Rest Framework пользователю, может быть более целесообразно использовать HttpResponse
,
from django.http import HttpResponse
...
return HttpResponse(data, content_type="image/png")
Django Rest Framework самостоятельно Response
попытается отобразить двоичные данные, которые могут вызвать проблему кодирования, которую вы видите.