Я перепробовал все возможные варианты за последние два дня, и, похоже, ничего не работает.Пожалуйста, потерпите меня, это будет немного долго.
Это моя модель UserProfile
class UserProfile(models.Model):
user = models.OneToOneField(User, related_name='profile', on_delete=models.CASCADE, )
status = models.CharField(max_length=255, null=True, blank=True)
thumbnail = models.ImageField(upload_to='media/user/', blank=True, null=True)
Это Сериализатор,
class UserProfileSerializer(serializers.ModelSerializer):
thumbnail = serializers.ImageField(max_length=256, use_url=True, allow_empty_file=False)
class Meta:
model = models.UserProfile
fields = ('status', 'thumbnail',)
Теперь, когда я пытаюсьзагрузить это изображение, используя POSTMAN, этот вывод, который я получаю,
{
"thumbnail": [
"No file was submitted."
]
}
Чтение некоторых сообщений SO Я попытался заменить сериализатор по умолчанию на этот,
class Base64ImageField(serializers.ImageField):
"""
A Django REST framework field for handling image-uploads through raw post data.
It uses base64 for encoding and decoding the contents of the file.
Heavily based on
https://github.com/tomchristie/django-rest-framework/pull/1268
Updated for Django REST framework 3.
"""
def to_internal_value(self, data):
# Check if this is a base64 string
if isinstance(data, six.string_types):
# Check if the base64 string is in the "data:" format
if 'data:' in data and ';base64,' in data:
# Break out the header from the base64 content
header, data = data.split(';base64,')
# Try to decode the file. Return validation error if it fails.
try:
decoded_file = base64.b64decode(data)
except TypeError:
self.fail('invalid_image')
# Generate file name:
file_name = str(uuid.uuid4())[:12] # 12 characters are more than enough.
# Get the file name extension:
file_extension = self.get_file_extension(file_name, decoded_file)
complete_file_name = "%s.%s" % (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):
import imghdr
extension = imghdr.what(file_name, decoded_file)
extension = "jpg" if extension == "jpeg" else extension
return extension
Ничего не меняется иЯ продолжаю вести себя точно так же.Результат, который я ожидаю, выглядит примерно так:
{
"status":"something",
"thumbnail":"file/path"
}
Вот так я загружаю изображение с помощью POSTMAN.
Может кто-нибудь, пожалуйста, помогите мне с этим, я в значительной степени опробовал каждый вариант на SO безрезультатно.