如何将图像传输到 Django REST 框架应用程序?

How to transfer images to Django REST framework applications?

我已经了解了一些关于 REST API 的知识,现在在学习的过程中,作为一种练习,我正在尝试使用 Python Django 的 REST 框架构建一个。我面临的困难是,我无法从 POSTMAN 或 Curl 或任何其他 REST 客户端发出带有图像的 POST 请求。我看到图像可以编码成 base64 然后传输。不幸的是,互联网资源无法帮助我让我自己做。现在任何人都可以帮助我走出整个过程只是为了让它更容易吗? 提前致谢。

您可以像这样自定义 ImageField django rest 框架 (DRF):

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. """

def to_internal_value(self, data):
    from django.core.files.base import ContentFile
    import base64
    import six
    import uuid

    # 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 Exception:
                raise serializers.ValidationError(_('Invalid image format'))

            file_name = str(uuid.uuid4())[:12]  # 12 characters are more than enough.
            # Get the file name extension:
            file_extension = self.get_file_extension(header)

            complete_file_name = "%s.%s" % (file_name, file_extension,)

            data = ContentFile(decoded_file, name=complete_file_name)
        else:
            raise serializers.ValidationError(_('Invalid image format'))

    return super(Base64ImageField, self).to_internal_value(data)

def get_file_extension(self, header):
    data, format = header.split('/')
    return format

然后在您的 ModelSerializer:

中像这样使用它
class AddImageSerializer(serializers.ModelSerializer):
    image = Base64ImageField(use_url=True)

    class Meta:
        model = YourModel
        fields = ('image',)