【发布时间】:2014-09-15 03:52:34
【问题描述】:
所以我的项目中有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 可以被外部访问。
谁能帮帮我?也许是一个完整的例子,所以我可以尝试一下,我已经尝试了很多我在谷歌上找到的东西,但还没有运气
【问题讨论】:
-
我在我的项目中使用了完全相同的代码,它完美地工作。它将
?signature=xxx附加到文件URL。签名是一个非常长的字符串。如果有人知道签名,他们就可以访问该文件。这看起来像你得到的东西吗? -
@AshishKasturia 上面的哪个代码??无论如何,在我上传文件并单击链接后,我确实得到了签名。但是如果我删除签名,我应该无法访问该文件,但我仍然是。对不对?
-
第二个是
k.set_acl('private')。没有签名就无法访问文件是对的。此外,请确保 S3 存储桶内的文件夹在“权限”下设置为私有 -
但我正在从同一个存储桶中提供我的静态文件,并且在里面我有
static和media。如果我将其设置为私有不会影响我的静态文件?你能分享一些你在哪里工作的代码吗? -
我目前无法使用我的笔记本电脑,如果您同意的话,我会在晚上发布我的代码 sn-p。另外,我刚刚检查了我的 S3 存储桶,你是对的。您不能将权限分配给单个文件夹,只能在存储桶上。我的存储桶是公开的,但由于
k.set_acl('private'),个别文件是私有的。你能点击上传文件旁边的复选框,然后检查它的属性吗?
标签: python django amazon-s3 boto django-storage