使用django-queued-storages + boto + amazon s3 管理私有文件
我在项目中使用了 django-queued-storages
、django-storages
和 boto
,想把我的 PDF 文件上传到 S3,并且希望它们能立刻变成私有的。
我尝试了很多方法,但都没有成功,以下是我尝试过的:
publication_storage = QueuedStorage(
local='django.core.files.storage.FileSystemStorage',
remote='storages.backends.s3boto.S3BotoStorage',
remote_options=dict(acl="private")
)
但是我的文件还是没有变成私有。
我还尝试过类似的做法,参考了这个链接:http://www.gyford.com/phil/writing/2012/09/26/django-s3-temporary.php:
k = boto.s3.key.Key(bucket)
k.key = settings.MEDIA_DIRECTORY + self.private_file
k.set_acl('private')
但这些方法上传的 PDF 文件依然可以被外部访问。
有没有人能帮帮我?也许给我一个完整的例子让我试试,我在谷歌上找了很多方法,但都没有成功。
1 个回答
0
经过一番讨论,这里是我找到的解决办法。
因为你把 media
和 static
放在同一个存储桶里,所以你需要把这个存储桶设置为私有。然后,只需在 S3 管理面板中右键点击 static
文件夹,选择“公开”就可以了。
至于 media
文件夹,你的第二段代码就足够了。
k = boto.s3.key.Key(bucket)
k.key = settings.MEDIA_DIRECTORY + self.private_file
k.set_acl('private')
这对我来说也是一次学习,因为我在 S3 上有两个不同的存储桶,一个用来上传文件,另一个用来存放静态文件。所以我自然没有遇到这个问题。
祝你好运!