【问题标题】:django storages with boto using pirvate ACL throws 404 on savedjango storages with boto 使用 pirvate ACL 在保存时抛出 404
【发布时间】:2013-04-24 15:29:10
【问题描述】:

我正在使用带有 boto 的 django-storages。如果我让存储在我的模型中作为公共处理 S3 文件上传,那么一切正常。 但是,当我在保存/更新时将 ACL 设置为私有时,我收到此错误消息

S3ResponseError: 404 Not Found
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>NoSuchKey</Code><Message>The specified key does not exist.</Message><Key>https:/s3.amazonaws.com/mahbuckit/mods/1366814943/1363379259-re6pc-x-l4d2-the-witch-psd-jpgcopy.zip</Key><RequestId>9631D1222C18F323</RequestId><HostId>bmMgn75bqITigKJWM7L7JrjN2TcsPCslOt9d3LX6WvzxWbHcdBfeqBIdFSZsmhXW</HostId></Error>

这发生在添加/更新记录时。

这是我保存有 FileFIeld 的模型的部分。我重写以将 acl 设置为私有。

 def save(self, *args, **kwargs):
        super(MyModel, self).save(*args, **kwargs)
        if self.file:
            conn = boto.connect_s3(settings.AWS_ACCESS_KEY_ID,settings.AWS_SECRET_ACCESS_KEY)
            bucket = conn.create_bucket(settings.AWS_STORAGE_BUCKET_NAME)
            k = boto.s3.key.Key(bucket)
            k.key = settings.MEDIA_URL + self.file.name
            k.set_acl('private')

但是文件保存一切正常。这是该死的错误。

【问题讨论】:

  • 你把文件的内容放到S3的什么地方?我没有在上面的代码中看到它。
  • 我正在使用 django 存储。它处理实际的文件上传。

标签: acl private boto django-storage


【解决方案1】:

我发现了问题。参考我使用和修改的作品的好人http://www.gyford.com/phil/writing/2012/09/26/django-s3-temporary.php

我注意到我用 URL 构造了 Key。作者在推特中指出。这是错误消息的全部原因。睡眠不足,但错误消息清楚地表明缺少密钥,但显示的是 URL 而不是密钥。我的问题就在那里。键应该是文件或路径+文件名。

【讨论】:

  • 我必须说,在我上面提到的修复之后,我仍然在生产的表单发布上得到 404,但不是在本地。我想我可能遗漏了什么,或者出现了新问题。
  • 你引用的帖子看起来很有用,但已经过时了。是否有任何更新的参考资料?
【解决方案2】:

从我的测试看来,你需要 k.key 来反映 self.file.name:

k.key = self.file.name

【讨论】:

  • 你可能会在这个方面走上正轨。我会尝试并恢复。
猜你喜欢
  • 1970-01-01
  • 2012-05-01
  • 2017-04-11
  • 1970-01-01
  • 2013-12-06
  • 2011-03-24
  • 2017-06-20
  • 2012-01-30
  • 2012-05-06
相关资源
最近更新 更多