Отправить файл через 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 попытается отобразить двоичные данные, которые могут вызвать проблему кодирования, которую вы видите.

Другие вопросы по тегам