Django S3 : UnicodeDecodeError: 'utf-8' кодек не может декодировать байт 0xff в позиции 0: недопустимый начальный байт
Я пытаюсь использовать s3 для получения изображений на моем сайте.
Я пытаюсь использовать функцию get_object() для доступа к объекту изображения.
Частью объекта, которую я хочу вернуть, является Body, тип которого - StreamingBody. Я хочу преобразовать StreamingBody в строку, чтобы вернуть ее.
Вот мой код :
def get_image_link(image):
"""Get image link"""
key = "media/" + str(image)
s3 = boto3.client('s3', config=Config(signature_version='s3v4', region_name=settings.AWS_S3_REGION_NAME))
obj = s3.get_object(Bucket=settings.AWS_STORAGE_BUCKET_NAME, Key=key)
return obj['Body'].read().decode('utf-8')
obj['Body'].read()
возвращают байты, которые я пытаюсь декодировать в utf-8.
Когда я запускаю obj['Body'].read().decode('utf-8')
, я получаю эту ошибку : UnicodeDecodeError: 'utf-8' кодек не может декодировать байт 0xff в позиции 0: недопустимый начальный байт
Заранее благодарю за помощь
Зависит от того, что именно вы хотите сделать:
Отобразить изображение:
from django.http import HttpResponse
from rest_framework.decorators import api_view
@api_view(['GET'])
def get_image(request, image):
...
data = obj['Body'].read()
return HttpResponse(data, content_type=obj["ContentType"])
Display base64
Data URL
import base64
from django.http import HttpResponse
from rest_framework.decorators import api_view
@api_view(['GET'])
def get_image(request, image):
...
data = obj['Body'].read()
base64_data = base64.b64encode(data).decode("utf-8")
return HttpResponse(f'<img src="data:{obj["ContentType"]};base64,{base64_data}">')
Похоже, что вы используете Django REST framework, поэтому если вы хотите вернуть JSON, вам придется закодировать его с помощью bas64
, например:
import base64
from rest_framework.decorators import api_view
from rest_framework.response import Response
@api_view(['GET'])
def get_image(request, image):
...
data = obj['Body'].read()
base64_data = base64.b64encode(data).decode("utf-8")
return Response(base64_data)