0

所以我关注了这个问题How to setup a Django project with django-storages and Amazon S3, but with different folder 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 似乎不正确。我手动为您的一张图片生成了一个新 URL 以对其进行测试。新图像位于此处: http ://s3.amazonaws.com/comprasonline-brazil/media/cache/bc/f5/bcf55748e916eb1979eab9e2713fa97f.jpg?AWSAccessKeyId=AKIAJVPBLRLYHX6EQKUA&Expires=1379587008&Signature=QiU8OvknWHoK7R9YsM%2DFG8%4R9YsM%2DFG8%4 请注意,格式有点不同,它在 /cache/b5/f5 等前面有 '/media/。然后我可以根据这个屏幕截图查看图像。您可能需要重新生成一个新的 URL,因为在您获得此 URL 时该 URL 可能已经过期。看起来 Django 没有为这些上传的资产生成正确的 URL。我用来生成新 URL 的页面位于此处。您是否知道任何可能会影响这一点的设置?这有点超出了我们的范围,我找不到任何设置“/cache/”目录的 django-oscar 设置。干杯,里斯

我这是一个 django-oscar 问题?如果是的话,任何人都知道我该如何解决这个问题?

在此处输入图像描述

4

1 回答 1

0

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

S3 不是直接提供文件的最佳选择,您最好使用 Cloudfront 和您的 s3 存储桶作为源。

于 2013-09-05T03:10:34.953 回答