带有载波的相同型号的动态存储目录

时间:2017-07-05 15:56:44

标签: ruby-on-rails carrierwave fog

我正在使用带雾的CarrierWave将我的图像上传到S3。

我有模型图像,可以表示不同大小的图像,并根据需要保存在不同的文件夹中。

例如,对于.我可能有两个不同的上传版本需要保存为:

image.jpg

可能有任意数量的用例,使用minimagick的版本无法覆盖所有用例。

到目前为止,我还没有找到解决方案。有谁知道怎么做?

2 个答案:

答案 0 :(得分:1)

我已经看过几次问这个问题,所以我会写出我的最终解决方案。

不是在模型上定义mount_uploader,而是决定单独使用Uploader并稍后将URL保存到记录中。

动态更改store_dir和文件名可以像这样完成

[
{"SectionTitle":"Section A",
"questions":
[{"title":"What is Java?"
"answers": [{"title":"programming language", "isCorrect":"true"},{"title":"cooking technique","isCorrect":"false"},{"title":"movie star","isCorrect":"false"}]
},...]
},...
]

使用这种方法,您还可以使用局部变量或控制器中可用的任何内容定义名称。

希望它也有助于其他人。

答案 1 :(得分:0)

为了更改上传文件的放置位置,只需覆盖store_dir方法:,针对您的情况(reference link

class Image < CarrierWave::Uploader::Base
storage :file
  # this if you using use condition for folder location
  def store_dir
    if model.somefield == "somecondition
       "uploads/#{model.somefield}"
    elsif model.somefield == "somecondition
       "uploads/location2"
    else
       "uploads/default_dir"
    end

  end
  # this is if you want to use version_name
  def store_dir
    'images/#{version_name}/'
  end
end