django heroku media file 404 amazon s3

时间:2013-09-04 22:06:15

标签: django heroku amazon-web-services amazon-s3 django-oscar

所以我已经关注了这个问题How to set-up a Django project with django-storages and Amazon S3, but with different folders for static files and media files?,以便让我的django应用程序将媒体文件上传到我的亚马逊S3存储桶中。顺便说一下,我正在使用django-oscar。 我上传图像后,一切似乎工作正常,但当我重新加载页面时,图像消失,我得到404错误。 我的静态文件工作正常..我没有发现任何问题。

更新:

我已将我的存储桶政策更改为公开,但仍然无法将图像加载到我的缩略图上:

{
  "Version":"2008-10-17",
  "Statement":[{
    "Sid":"AllowPublicRead",
        "Effect":"Allow",
      "Principal": {
            "AWS": "*"
         },
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::bucket/*"
      ]
    }
  ]
}

有什么想法吗?如果我点击链接我可以看到图像,但从缩略图它不加载并给我404

当我尝试访问404链接时,我得到了

<Error>
<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
<Key>cache/7b/4d/7b4d647e0faa51cb4226f13b780ba320.jpg</Key>
<RequestId>4BF12C367D0C65D1</RequestId>
<HostId>
b7c4LraxQtVGMe3bE+hAPOSBo9nrHE8DiyLbsBchfmdAul8F0Uw0+pKkO+PM6z/i
</HostId>
</Error>

更新: 我问过heroku的人,这就是他们给我的答案:

  

嗨,看看它看起来像是Django的URL   生成不正确。我为您的某个图片生成了一个新网址   手动测试它。新图片位于此处:   http://s3.amazonaws.com/comprasonline-brazil/media/cache/bc/f5/bcf55748e916eb1979eab9e2713fa97f.jpg?AWSAccessKeyId=AKIAJVPBLRLYHX6EQKUA&Expires=1379587008&Signature=QiU8OvknWHoK7R9YsM%2FG8V%2F4v8s%3D   请注意,格式有点不同,它有'/ media / in   前面的/ cache / b5 / f5等我随后能够查看图像,如   根据此截图。您可能需要重新生成一个新URL   你得到这个可能会到期。看起来像   Django没有为这些上传的资产生成正确的URL。该   我用来生成新网址的页面位于此处。你是   知道任何可能影响这个的设置?这是一点点   超出我们的范围,我无法找到任何django-oscar设置   设置'/ cache /'目录。干杯,里斯

我这是一个django-oscar问题?如果有人知道我该如何解决这个问题?

enter image description here

1 个答案:

答案 0 :(得分:0)

您的文件似乎是私有的,并且正在生成签名以访问它们。默认情况下,上传到s3的文件设置为私有。您必须将文件明确设置为公开。

S3不是直接提供文件的最佳选择,您最好使用以s3存储桶为原点的cloudfront。