Rails PaperClip:如何将 public_read 文件转换为私人文件?

Rails PaperClip: How can you convert a public_read file to private?

我最近将回形针上传切换为使用 :s3_permissions => :private

https://github.com/thoughtbot/paperclip/wiki/Restricting-Access-to-Objects-Stored-on-Amazon-S3

所有新上传的内容现在都是安全且私密的。

现在我正在尝试保护所有以前上传的内容。

是否有可能触发一个过程,该过程将重新上传为 amazon S3 安全?

更新所有对象的权限比重新上传它们要容易得多。

我能想到的两种方法:

  1. Paperclip 有一个使用 s3 存储的附件的 set_permissions 方法,因此您可以循环遍历现有模型并在每条记录上调用类似 user.avatar.set_permissions(:private) 的方法.

  2. s3cmd 之类的工具也很适合完成此任务。安装后,像这样的命令就可以做到:

s3cmd setacl --acl-private --recursive --verbose s3://your_bucket/paperclip/path

更新:set_permissions 与您想象的不同;它在创建对象时使用但不更新对象。相反,使用回形针 s3_object 方法,然后使用 aws-sdk api:

更新对象

user.avatar.s3_object.acl.put(acl: 'private')