是否可以使用carrierwave为特定文件版本设置不同的访问权限

Is it possible to set a different access permission to an specific file version using carrierwave

好的...假设我在我的资源上传器上定义了版本 :high:preview:thumb

我在我的 carrierwave 配置文件上设置了 "config.fog_public = false",我希望能够将访问限制在原始文件和 :high 版本上,同时允许 :thumb:preview 版本为 public(不需要 s3 签名 url)。

有人知道这是否可行吗?

如果确实有可能,我应该在 :preview:thumb 定义的访问权限中添加什么?

version :high, :if => :process_version_immediately? do
  process :resize_to_limit => [2048,1536]
end

version :preview, from_version: :high, :if => :process_version_immediately? do
  process :resize_to_limit => [640,480]
end

version :thumb, from_version: :preview, :if => :process_version_immediately? do
  process :manualcrop, :if => :croppable?
  process :manualrotation, :if => :rotable?
  process :resize_to_fit => [200,200]
end

经过大量研究后,我意识到仅使用载波无法做到这一点,但通过查看载波对象内部,我认为我找到了使用雾 gem 解决该问题的解决方法,这是一个对载波的依赖性 gem.

我通过 rails 控制台做了一些测试来证明我的概念,基本上我所做的是使用我的 AWS 雾凭证(在我的 carrierwave 配置文件中定义的凭证)实例化雾对象。

这是我所做的分步操作:

fog_storage = Fog::Storage.new(:provider => 'AWS',
:aws_access_key_id => 'YOUR_ACCESS_KEY_ID',
:aws_secret_access_key  => 'YOUR_SECRET_ACCESS_KEY', 
:region => 'THE_REGION_OF_YOUR_ACCOUNT')

fog_dir = storage.directories.get('THE_NAME_OF_YOUR_BUCKET')

# next, you need to find the object's path for the version you want to change 
# the permission access. Let's say the primary photo for a post in your private 
# blog or whatever
fog_file= fog_dir.files.get(post.photo.thumb.path)

# In my case I want that specific file version to be readable by everyone, so I set
# 'public-read' into AWS's Access Control List attribute or acl
fog_file.acl='public-read'

# and finish by saving the new property into the referenced object
fog_file.save 

这对我有用...现在只取决于何时执行此逻辑。就我而言,由于我的版本是在后台处理的,因此我将在后台进程创建版本后实施它。

在我的应用程序中,这是否有效,我还不知道,因为我仍然需要实施它。但实际上它在 rails 控制台上工作。我仍然需要检查这是否会在我的服务器上产生任何类型的开销,但在初始测试后似乎不是这种情况,因为保存发生在 AWS 端。

我仍然想检查是否可以直接从我的载波管理资源字段中获取雾对象,而不必实例化雾 class。

我将根据我的进度编辑此答案,以供社区将来参考。