Python 使用AmazonS3和Heroku Django存储上传的图像

Python 使用AmazonS3和Heroku Django存储上传的图像,python,django,heroku,amazon-s3,django-media,Python,Django,Heroku,Amazon S3,Django Media,我在Heroku部署了一个Django项目。在本地,它运行良好。但是,在生产中存在一个问题:管理员上传的图像文件无法找到和显示 错误消息是: Failed to load resource: the server responded with a status of 404 (Not Found) 服务器尝试的URL如下所示: https://thawing-escarpment-####.herokuapp.com/image.png 为了解决这个问题,我尝试使用AmazonS3作为媒体文

我在Heroku部署了一个Django项目。在本地,它运行良好。但是,在生产中存在一个问题:管理员上传的图像文件无法找到和显示

错误消息是:

Failed to load resource: the server responded with a status of 404 (Not Found)
服务器尝试的URL如下所示:

https://thawing-escarpment-####.herokuapp.com/image.png
为了解决这个问题,我尝试使用AmazonS3作为媒体文件的存储。我在这方面是个新手,所以我尝试了几个教程,但都没有效果

作为参考,我创建了一个名为
mywebsiteassets

然后设置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>
模板/home.html
中:

{% for content in spotlight_contents %}
    <img src="{{ content.image.url }}" alt="{{ content.title }}" width="140" height="140">
    <p>{{ content.description }}</p>
{% endfor %}
在这些更改之后,我重新登录到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是AmazonAWS的,但是找不到图像资源,这让我相信它没有正确添加。有人知道如何让它工作吗?提前感谢。

如果我给你提供在Heroku上托管静态文件的解决方案,这是否可以接受?@lambo477是否可以在Heroku上托管媒体文件?如果是这样的话,这会让事情变得简单。如果你去亚马逊网络服务控制台浏览bucket,文件在那里吗?@SamP:是的,bucket还在那里。我上传了一个示例媒体文件并查看了链接:。看来我的媒体需要更改了。这个页面对我很有用:,还有django存储和s3boto
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 = ''
<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>