Получите изображение из частного ведра 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'