Получите изображение из частного ведра S3 и преобразуйте его в блоб с помощью django, чтобы передать его в React Js

У меня есть поле logo как Imagefield и я подключил filepath к s3 bucket. Когда я загружаю изображение в логотип, оно будет загружено в s3, если я удаляю или изменяю его, оно работает. Но когда я хочу получить изображение, чтобы показать его во фронтенде (reactjs), я генерирую метод url, где учетные данные aws отображаются в самом url.

Но мне нужно изменить изображение как blob (бинарный файл) и передать эти данные фронтенду для GET вызова. Я не знаю как это можно сделать, просмотрел много сайтов, но так и не понял. Пожалуйста, помогите мне решить эту проблему.

Models.py

class Organisation(models.Model):
    """
    Organisation model
    """
    org_id = models.AutoField(unique=True, primary_key=True)
    org_name = models.CharField(max_length=100)
    org_code = models.CharField(max_length=20)
    org_mail_id = models.EmailField(max_length=100)
    org_phone_number = models.CharField(max_length=20)
    org_address = models.JSONField(max_length=500, null=True)
    product = models.ManyToManyField(Product, related_name='products')
    org_logo = models.ImageField(upload_to=upload_org_logo, null=True, blank=True,)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)


    def remove_on_image_update(self):
        try:
            # is the object in the database yet?
            obj = Organisation.objects.get(org_id=self.org_id)
        except Organisation.DoesNotExist:
            # object is not in db, nothing to worry about
            return
        # is the save due to an update of the actual image file?
        if obj.org_logo and self.org_logo and obj.org_logo != self.org_logo:
            # delete the old image file from the storage in favor of the new file
            obj.org_logo.delete()


    class Meta:
        db_table = "organisation_master"

    def __str__(self):
        return self.org_name

serializers.py

class Organisation_Serializers(serializers.ModelSerializer):

    class Meta:
        model = Organisation
        fields = ('org_id', 'org_name','org_address', 'org_phone_number', 'org_mail_id','org_logo','org_code','product',)
        depth = 1

views.py

class Organisation_Viewset(DestroyWithPayloadMixin,viewsets.ModelViewSet):
    renderer_classes = (CustomRenderer, )  #ModelViewSet Provides the list, create, retrieve, update, destroy actions.
    queryset=models.Organisation.objects.all()
    parser_classes = [parsers.MultiPartParser, parsers.FormParser]
    http_method_names = ['get', 'post', 'patch', 'delete']
    serializer_class=serializers.Organisation_Serializers

settings.py

AWS_ACCESS_KEY_ID = ''
AWS_SECRET_ACCESS_KEY = ''
AWS_STORAGE_BUCKET_NAME = ''
AWS_QUERYSTRING_AUTH = True

AWS_S3_FILE_OVERWRITE = False

AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}

AWS_S3_SIGNATURE_VERSION = 's3v4'
AWS_S3_REGION_NAME = ''
AWS_DEFAULT_ACL = None
AWS_S3_VERIFY = True
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
Вернуться на верх