Django default_storage не может найти существующий файл

Я настраиваю работу с моим приложением django, но столкнулся с проблемой при проверке наличия какого-либо файла в хранилище S3.

Я не могу понять, почему я не могу использовать метод exists() в своем коде. Я долго искал ошибку, но оказалось, что метод exists() всегда возвращает мне значение False.

Вот пример:

>>> from django.core.files.storage import default_storage
>>> print(default_storage.listdir(""))

(['media', 'preview'], ['address_preview_1.png','address_preview_35.jpg'])
>>> 
>>> print(default_storage.listdir("media"))
([], ['address_preview_35.jpg'])
>>> print(default_storage.exists('address_preview_35.jpg'))
False
>>> print(default_storage.exists('/media/address_preview_35.jpg'))
False
>>> print(default_storage.exists('media/address_preview_35.jpg'))
False
>>> print(default_storage.location)
media

Мы видим, что файл "address_preview_35.jpg " есть как в корневом каталоге репозитория, так и в папке "media".

Все аргументы в settings.py настроены так, как описано в документации. Файлы изображений определенно находятся на сервере. Мы можем открыть его. Мы можем получить изображение по полной ссылке. Мы можем загружать новые файлы на сервер и удалять старые. Мы можем делать все, кроме проверки того, есть ли файл на сервере или нет. Что я делаю не так!?

Я попытался получить доступ к серверу напрямую и через s3cmd. Я попытался получить доступ к хранилищу в модуле через

from storages.backends.s3boto3 import S3Boto3Storage

s3_storage = S3Boto3Storage()
print(s3_storage.exists("media/address_preview_35.jpg"))

результат тот же - я вижу файл в списке, но при проверке exists() получаю значение False.

чтобы включить необходимые разрешения для корзины S3 для проверки существования файла с помощью exists(), выполните следующие действия:

Перейдите в консоль aws iam:

  1. нажмите "пользователи" на боковой панели

  2. выберите пользователя iam, связанного с приложением django

  3. перейдите на вкладку разрешения

  4. нажмите кнопку добавить разрешения, затем прикрепите политики

Прикрепить AmazonS3ReadOnlyAccess политика только для чтения

  • найдите доступ к Amazon S3 только для чтения.

  • прикрепите его, чтобы предоставить разрешения на чтение для всех S3 objects.cl

  • нажмите прикрепить политику

Если у вас уже есть разрешение, вам может потребоваться понизить django-хранилища[boto3] проверьте здесь

Вернуться на верх