【问题标题】:Carrierware: store file in directories accordint to created_at dateCarrierwave:根据 created_at 日期将文件存储在目录中
【发布时间】:2012-12-12 11:16:04
【问题描述】:

我正在使用carrierwave 来处理我的上传。我已经指定了 store_dir 以下方式:

def store_dir
  "uploads/#{Time.now.year}/#{Time.now.month}/#{Time.now.day}"
end

上传文件就像一个魅力 - 每次我上传一个文件时,它都会在它应该结束的目录中结束;即“今天的目录”。

当我尝试下载文件时,carrierwave 正在根据 store_dir 选项动态构建下载路径。因此,假设在 2012 年 12 月 1 日上传的文件可在 fliesystem 的以下路径中找到:

/uploads/2012/12/01/file.ext

将被carrierwave检索为:

/uploads/2012/12/12/file.ext

这显然会导致“无法读取文件”错误。

我提供了 2 种不同的可能解决方案:

  1. 创建一个单独的文件,我将在其中存储文件创建时的实际文件路径,然后使用该值检索文件。
  2. 重载 retrieve_from_store! 方法(它是 carrierwave gem 的一部分)并使其基于文件记录中的 created_at 字段而不是 store_dir。

我倾向于第二种可能性,因为它感觉不那么脏。然而,两者都觉得“不走寻常路”。哪个更好用,为什么?或者也许carrierwave提供了解决这个问题的方法?

【问题讨论】:

    标签: ruby-on-rails carrierwave


    【解决方案1】:

    这里完全是猜测,但通过查看文档,我认为这样的事情应该可行:

    def store_dir
        "uploads/#{model.created_at.year}/#{model.created_at.month}/#{model.created_at.day}"
    end
    

    【讨论】:

      猜你喜欢
      • 2013-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-09
      • 1970-01-01
      • 2018-12-01
      • 1970-01-01
      • 2011-03-03
      相关资源
      最近更新 更多