【问题标题】:private files with django-queued-storages + boto + amazon s3带有 django-queued-storages + boto + amazon s3 的私人文件
【发布时间】: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 存储桶内的文件夹在“权限”下设置为私有
  • 但我正在从同一个存储桶中提供我的静态文件,并且在里面我有 staticmedia 。如果我将其设置为私有不会影响我的静态文件?你能分享一些你在哪里工作的代码吗?
  • 我目前无法使用我的笔记本电脑,如果您同意的话,我会在晚上发布我的代码 sn-p。另外,我刚刚检查了我的 S3 存储桶,你是对的。您不能将权限分配给单个文件夹,只能在存储桶上。我的存储桶是公开的,但由于k.set_acl('private'),个别文件是私有的。你能点击上传文件旁边的复选框,然后检查它的属性吗?

标签: python django amazon-s3 boto django-storage


【解决方案1】:

和你来来回回之后,这才奏效。

由于您在同一个存储桶下同时拥有mediastatic,因此请将存储桶设为私有。然后只需通过右键单击 S3 管理面板中的文件夹并单击“公开”来公开static 文件夹。

至于media 文件夹,您的第二个代码块就足够了

  k = boto.s3.key.Key(bucket)
  k.key = settings.MEDIA_DIRECTORY + self.private_file
  k.set_acl('private')

这对我来说也很有教育意义,因为我在 S3 上有两个单独的存储桶,一个用于上传,一个用于静态存储。所以很自然地我没有遇到这个问题。

祝你好运。

【讨论】:

  • 如果 media 文件夹在您提到的 S3 管理面板中是私有的,我是否需要使用代码将其中的文件也明确设为私有(例如 k.set_acl('private')?我是困惑。
猜你喜欢
  • 1970-01-01
  • 2013-12-06
  • 2015-06-05
  • 1970-01-01
  • 2012-05-06
  • 1970-01-01
  • 2012-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多