【问题标题】:Granular 'public' settings on uploaded files with Fog and Carrierwave使用 Fog 和 Carrierwave 上传文件的精细“公共”设置
【发布时间】:2011-10-07 18:43:25
【问题描述】:

我正在创建一个 Rails 应用程序,它允许管理员上传可选择公开显示的照片。对于上传/存储过程,我使用 Carrierwave gem 以及 Fog gem 和 S3。问题是,为了让这一切正常工作,我必须公开上传到 s3 存储桶的每个文件。有没有办法在逐个文件的基础上使文件公开/私有?此外,如果这种逐个文件的粒度是可能的,它是否可以扩展到图像版本(通过自动载波调整大小创建)?

目前,我的载波初始化程序中有以下行:

  config.fog_public = true

【问题讨论】:

  • 这可能是大多数 Rails 上传者长期要求的缺失功能。我建议使用 DragonFly,因为它允许前所未有的定制水平并且能够做到这一点。
  • 在快速浏览一下 DragonFly 之后,它似乎支持我想要完成的工作,并且似乎也比 CarrierWave 灵活得多。谢谢。

标签: ruby-on-rails ruby-on-rails-3 amazon-s3 carrierwave fog


【解决方案1】:

实际上,在 Carrierwave 中它非常简单。

你可以这样做:

class PrivateUploader < StandardUploader  

  @fog_public = false

或者(未经测试,但应该可以完美运行)这个:

class PrivateUploader < StandardUploader  


  def fog_public
    if local_condition
      true
    else
      false
    end
  end

:-)

我没有尝试过 DragonFly,但现在 Carrierwave 在过去 2 个月内解决了几个问题,它比我见过的其他任何东西都要好得多。非常灵活。

//马特

【讨论】:

  • 我之前设置了一个 after :store 回调来实现这一点,将我的原始版本设置为私有,其余为公开。这段代码极大地简化了我的工作。具体来说,为了公开上传的所有版本(除了原始版本),我现在在上面的代码中使用!self.version_name.nil? 作为我的local_condition
【解决方案2】:

只需让您的上传器类覆盖基类。我今天也把头发扯掉了.. :(这对我有用:

使用 Carrierwave 0.8.0(2013 年 5 月) /app/uploaders/whatever_uploader.rb

class WhateverUploader < CarrierWave::Uploader::Base
  def fog_public
    true # or false
  end
end

【讨论】:

    猜你喜欢
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    相关资源
    最近更新 更多