Приложение Django с учетной записью хранилища Azure - изображения не сохраняются в контейнере blob-хранилища
У меня есть приложение Django, и я пытаюсь хранить изображения в учетной записи Azure Storage. У меня есть база данных с таблицей category и свойством images, где URL-адрес загруженного изображения сохраняется, когда пользователь загружает изображение. Например:
media/photos/categories/Koesimanse.png
Однако изображение не сохраняется в контейнере хранилища Azure. Когда я пытаюсь получить доступ к URL-адресу:
https://dier.blob.core.windows.net/media/media/photos/categories/Liza_GUAzhRg.jpeg
Затем я получаю эту ошибку:
BlobNotFound
Указанный блоб не существует. RequestId:2bf5ff31-201e-0066-459e-a4a58e000000 Time:2025-04-03T13:45:48.5890398Z
Дополнительно, когда я проверяю контейнер blob, изображение там отсутствует.
Однако если я вручную загружаю изображение в контейнер Azure blob и сохраняю его URL в базе данных, изображение успешно извлекается из контейнера Azure Storage blob.
Итак, для моделей у меня есть следующее:
class Category(models.Model):
name = models.CharField(max_length=100, unique=True, verbose_name="Naam")
description = CKEditor5Field(
max_length=11000,
blank=True,
null=True,
verbose_name="Beschrijving",
config_name="extends")
images = models.ImageField(
upload_to="media/photos/categories", blank=False, null=False, verbose_name="Foto")
# Define the cropping field
cropping = ImageRatioField('images', '300x300')
category = models.ForeignKey("Category", on_delete=models.CASCADE,
related_name='subcategories', blank=True, null=True, verbose_name="Categorie")
date_create = models.DateTimeField(
auto_now_add=True, verbose_name="Datum aangemaakt")
date_update = models.DateTimeField(
auto_now=True, verbose_name="Datum geupdate")
def img_preview(self):
if self.images and self.images.name:
try:
if self.images.storage.exists(self.images.name):
print("IMAGES SAVED")
print(self.images)
return mark_safe(f'<img src = "{self.images.url}" width = "300"/>')
else:
return "No image"
except ResourceNotFoundError:
return "No image availble"
img_preview.short_description = "Huidige Foto"
class Meta:
managed = True
verbose_name = "Categorie"
verbose_name_plural = "Categoriën"
def save(self, *args, **kwargs):
if self.images:
self.images = process_image(self.images)
super().save(*args, **kwargs)
def __str__(self):
return self.name
А для хранилища azure у меня есть такой файл custom_azure.py:
from storages.backends.azure_storage import AzureStorage
class AzureMediaStorage(AzureStorage):
# Must be replaced by your <storage_account_name>
account_name = 'dier'
# Must be replaced by your <storage_account_key>
account_key = ''
azure_container = 'media'
expiration_secs = None
class AzureStaticStorage(AzureStorage):
# Must be replaced by your storage_account_name
account_name = 'dier'
# Must be replaced by your <storage_account_key>
account_key = ''
azure_container = 'static'
expiration_secs = None
и settings.py:
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
DEFAULT_FILE_STORAGE = 'Dieren.custom_azure.AzureMediaStorage'
STATICFILES_STORAGE = 'Dieren.custom_azure.AzureStaticStorage'
STATIC_LOCATION = "static"
MEDIA_LOCATION = "media"
AZURE_ACCOUNT_NAME = "dier"
AZURE_CUSTOM_DOMAIN = f'{AZURE_ACCOUNT_NAME}.blob.core.windows.net'
STATIC_URL = f'https://{AZURE_CUSTOM_DOMAIN}/{STATIC_LOCATION}/'
print("Hello")
#print (STATIC_URL)
MEDIA_URL = f'https://{AZURE_CUSTOM_DOMAIN}/{MEDIA_LOCATION}/'
print(MEDIA_URL)
MAINTENANCE_MODE = None
Вопрос: Как загрузить изображение в контейнер хранилища azure?