我正在使用带有boto的django-storage。如果我让存储在我的模型中处理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设置为private。
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')
然而,该文件保存所有确定。这是该死的错误。
答案 0 :(得分:1)
我发现了问题。关于我使用和修改过http://www.gyford.com/phil/writing/2012/09/26/django-s3-temporary.php
的工作的好人我注意到我用URL构建了Key。作者在twitter中指出。这是错误消息的全部原因。睡眠不足但错误消息明确表示缺少密钥但显示的是URL而不是密钥。我的问题就在那里。密钥应该是文件或路径+文件名。
答案 1 :(得分:0)
从我测试的内容来看,你需要k.key来反映self.file.name:
k.key = self.file.name