Anonymous
UnicodeDecodeError: кодек «UTF-8» не может декодировать байт 0xff в позиции 0: недопустимый начальный байт. ДРФ
Сообщение
Anonymous » 05 окт 2024, 13:45
В django есть серверная часть и база данных postgres, в которой хранятся данные об элементе, включая изображения. И есть проблема с получением картинки из базы, я пересмотрел достаточно решений, но ни одно не работает.
serializers.py
Код: Выделить всё
import base64
import uuid
import imghdr
class Base64ImageField(serializers.ImageField):
def to_internal_value(self, data):
if isinstance(data, str) and 'data:' in data and ';base64,' in data:
header, data = data.split(';base64,')
try:
decoded_file = base64.b64decode(data)
except (TypeError, ValueError):
self.fail('invalid_image')
file_name = str(uuid.uuid4())[:12]
file_extension = self.get_file_extension(file_name, decoded_file)
complete_file_name = f"{file_name}.{file_extension}"
data = ContentFile(decoded_file, name=complete_file_name)
return super(Base64ImageField, self).to_internal_value(data)
def get_file_extension(self, file_name, decoded_file):
extension = imghdr.what(file_name, decoded_file)
return extension or 'jpg'
class CreateItemSerializer(serializers.ModelSerializer):
owner = serializers.ReadOnlyField(source='owner.username')
photo = Base64ImageField(required=True)
class Meta:
model = CreateItem
fields = '__all__'
def create(self, validated_data):
items = CreateItem.object.create_item(
name = validated_data.get('name'),
price = validated_data.get('price'),
description = validated_data.get('description'),
type_item = validated_data.get('type_item'),
photo=validated_data.get('photo')
)
return items
views.py
Код: Выделить всё
class GetItemView(APIView):
serializer_class = CreateItemSerializer
def get(self, request):
items = CreateItem.object.all()
response_data = {
'items': [
{
'photo': item.photo,
'name': item.name,
'description': item.description,
'type_item': item.type_item,
'price': item.price,
}
for item in items
]
}
return Response(response_data, status=status.HTTP_200_OK)
полное отслеживание ошибок
Код: Выделить всё
Internal Server Error: /api/v1/item/items-get/
Traceback (most recent call last):
File "/home/anton/Documents/e-m/e-market/backend/my_backend/venv_em/lib/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
^^^^^^^^^^^^^^^^^^^^^
File "/home/anton/Documents/e-m/e-market/backend/my_backend/venv_em/lib/python3.12/site-packages/django/core/handlers/base.py", line 220, in _get_response
response = response.render()
^^^^^^^^^^^^^^^^^
File "/home/anton/Documents/e-m/e-market/backend/my_backend/venv_em/lib/python3.12/site-packages/django/template/response.py", line 114, in render
self.content = self.rendered_content
^^^^^^^^^^^^^^^^^^^^^
File "/home/anton/Documents/e-m/e-market/backend/my_backend/venv_em/lib/python3.12/site-packages/rest_framework/response.py", line 74, in rendered_content
ret = renderer.render(self.data, accepted_media_type, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/anton/Documents/e-m/e-market/backend/my_backend/venv_em/lib/python3.12/site-packages/rest_framework/renderers.py", line 100, in render
ret = json.dumps(
^^^^^^^^^^^
File "/home/anton/Documents/e-m/e-market/backend/my_backend/venv_em/lib/python3.12/site-packages/rest_framework/utils/json.py", line 25, in dumps
return json.dumps(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/json/__init__.py", line 238, in dumps
**kw).encode(obj)
^^^^^^^^^^^
File "/usr/lib/python3.12/json/encoder.py", line 200, in encode
chunks = self.iterencode(o, _one_shot=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/json/encoder.py", line 258, in iterencode
return _iterencode(o, 0)
^^^^^^^^^^^^^^^^^
File "/home/anton/Documents/e-m/e-market/backend/my_backend/venv_em/lib/python3.12/site-packages/rest_framework/utils/encoders.py", line 52, in default
return obj.decode()
^^^^^^^^^^^^
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
[04/Oct/2024 18:59:30] "GET /api/v1/item/items-get/ HTTP/1.1" 500 115134
Возможно, проблема в желательизаторе, но если да, то я не знаю, как это исправить.
Подробнее здесь:
https://stackoverflow.com/questions/790 ... -0-invalid
1728125123
Anonymous
В django есть серверная часть и база данных postgres, в которой хранятся данные об элементе, включая изображения. И есть проблема с получением картинки из базы, я пересмотрел достаточно решений, но ни одно не работает. serializers.py [code]import base64 import uuid import imghdr class Base64ImageField(serializers.ImageField): def to_internal_value(self, data): if isinstance(data, str) and 'data:' in data and ';base64,' in data: header, data = data.split(';base64,') try: decoded_file = base64.b64decode(data) except (TypeError, ValueError): self.fail('invalid_image') file_name = str(uuid.uuid4())[:12] file_extension = self.get_file_extension(file_name, decoded_file) complete_file_name = f"{file_name}.{file_extension}" data = ContentFile(decoded_file, name=complete_file_name) return super(Base64ImageField, self).to_internal_value(data) def get_file_extension(self, file_name, decoded_file): extension = imghdr.what(file_name, decoded_file) return extension or 'jpg' class CreateItemSerializer(serializers.ModelSerializer): owner = serializers.ReadOnlyField(source='owner.username') photo = Base64ImageField(required=True) class Meta: model = CreateItem fields = '__all__' def create(self, validated_data): items = CreateItem.object.create_item( name = validated_data.get('name'), price = validated_data.get('price'), description = validated_data.get('description'), type_item = validated_data.get('type_item'), photo=validated_data.get('photo') ) return items [/code] views.py [code] class GetItemView(APIView): serializer_class = CreateItemSerializer def get(self, request): items = CreateItem.object.all() response_data = { 'items': [ { 'photo': item.photo, 'name': item.name, 'description': item.description, 'type_item': item.type_item, 'price': item.price, } for item in items ] } return Response(response_data, status=status.HTTP_200_OK) [/code] полное отслеживание ошибок [code]Internal Server Error: /api/v1/item/items-get/ Traceback (most recent call last): File "/home/anton/Documents/e-m/e-market/backend/my_backend/venv_em/lib/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner response = get_response(request) ^^^^^^^^^^^^^^^^^^^^^ File "/home/anton/Documents/e-m/e-market/backend/my_backend/venv_em/lib/python3.12/site-packages/django/core/handlers/base.py", line 220, in _get_response response = response.render() ^^^^^^^^^^^^^^^^^ File "/home/anton/Documents/e-m/e-market/backend/my_backend/venv_em/lib/python3.12/site-packages/django/template/response.py", line 114, in render self.content = self.rendered_content ^^^^^^^^^^^^^^^^^^^^^ File "/home/anton/Documents/e-m/e-market/backend/my_backend/venv_em/lib/python3.12/site-packages/rest_framework/response.py", line 74, in rendered_content ret = renderer.render(self.data, accepted_media_type, context) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/anton/Documents/e-m/e-market/backend/my_backend/venv_em/lib/python3.12/site-packages/rest_framework/renderers.py", line 100, in render ret = json.dumps( ^^^^^^^^^^^ File "/home/anton/Documents/e-m/e-market/backend/my_backend/venv_em/lib/python3.12/site-packages/rest_framework/utils/json.py", line 25, in dumps return json.dumps(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/json/__init__.py", line 238, in dumps **kw).encode(obj) ^^^^^^^^^^^ File "/usr/lib/python3.12/json/encoder.py", line 200, in encode chunks = self.iterencode(o, _one_shot=True) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/json/encoder.py", line 258, in iterencode return _iterencode(o, 0) ^^^^^^^^^^^^^^^^^ File "/home/anton/Documents/e-m/e-market/backend/my_backend/venv_em/lib/python3.12/site-packages/rest_framework/utils/encoders.py", line 52, in default return obj.decode() ^^^^^^^^^^^^ UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte [04/Oct/2024 18:59:30] "GET /api/v1/item/items-get/ HTTP/1.1" 500 115134 [/code] Возможно, проблема в желательизаторе, но если да, то я не знаю, как это исправить. Подробнее здесь: [url]https://stackoverflow.com/questions/79055571/unicodedecodeerror-utf-8-codec-cant-decode-byte-0xff-in-position-0-invalid[/url]