使用django-queued-storages + boto + amazon s3 管理私有文件

0 投票
1 回答
1151 浏览
提问于 2025-04-18 14:29

我在项目中使用了 django-queued-storagesdjango-storagesboto,想把我的 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

经过一番讨论,这里是我找到的解决办法。

因为你把 mediastatic 放在同一个存储桶里,所以你需要把这个存储桶设置为私有。然后,只需在 S3 管理面板中右键点击 static 文件夹,选择“公开”就可以了。

至于 media 文件夹,你的第二段代码就足够了。

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

这对我来说也是一次学习,因为我在 S3 上有两个不同的存储桶,一个用来上传文件,另一个用来存放静态文件。所以我自然没有遇到这个问题。

祝你好运!

撰写回答