Использование Amazon S3 с Heroku Django для хранения загружаемых изображений

У меня есть проект Django, развернутый в Heroku. Локально работает нормально. Однако при работе возникает проблема: файлы изображений, загруженные администратором, не могут быть найдены и отображены.

Сообщение об ошибке:

Failed to load resource: the server responded with a status of 404 (Not Found)

и URL, который пробовал сервер, выглядит примерно так:

https://thawing-escarpment-####.herokuapp.com/image.png

Чтобы это исправить, я попытался использовать Amazon S3 в качестве хранилища для медиафайлов. Я абсолютно новичок в этом, поэтому я попробовал несколько уроков, но ничего не получалось.

Используя этот учебник Heroku для справки, я создал корзину под названием my-website-assets

а затем настройте конфигурации для Heroku:

heroku config:set AWS_ACCESS_KEY=xxx AWS_SECRET_KEY=yyy
heroku config:set S3_BUCKET = my-website-assets

и затем изменил конфигурацию ведра CORS:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>thawing-escarpment-####.herokuapp.com</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>PUT</AllowedMethod>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

В app/models.py Я имею:

class SpotlightContent(models.Model):
    title = models.CharField(max_length=300)
    image = models.ImageField(upload_to="")
    description = models.TextField()

В templates/home.html:

{% for content in spotlight_contents %}
    <img src="{{ content.image.url }}" alt="{{ content.title }}" width="140" height="140">
    <p>{{ content.description }}</p>
{% endfor %}

В моем settings.py файл я внес изменения в MEDIA_URL а также MEDIA_ROOT:

STATIC_URL = '/static/'

STATIC_ROOT = os.path.join(BASE_DIR, 'static', 'static_root')

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static', 'static_dirs'),
)

ADMIN_MEDIA_PREFIX = 'https://s3.amazonaws.com/my-website-assets/'
MEDIA_URL = 'https://s3.amazonaws.com/my-website-assets/'
MEDIA_ROOT = ''

После этих изменений я снова вошел в Django, добавил новый объект Spotlight и обновил веб-страницу. Изображение все еще не может быть загружено, поэтому я проверил исходный код:

<img src="https://s3.amazonaws.com/my-website-assets/test_icon.png" alt="Test" width="140" height="140">
<p>This is a test. Please work!</p>

Хотя URL-адрес Amazon AWS, ресурс изображения не найден, что наводит меня на мысль, что он был добавлен неправильно. Кто-нибудь знает, как заставить это работать? Заранее спасибо.

0 ответов

Другие вопросы по тегам