是否可以使用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。
我将根据我的进度编辑此答案,以供社区将来参考。
好的...假设我在我的资源上传器上定义了版本 :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。
我将根据我的进度编辑此答案,以供社区将来参考。