【问题标题】:Can I recreate_versions original file exists using CarrierWave?我可以使用 CarrierWave 重新创建_versions 原始文件吗?
【发布时间】:2015-08-06 06:38:06
【问题描述】:

我正在使用 rails 中的载波来进行 ImageUpload。

由于文件大小,我想调整原始图像文件的大小。

所以我删除了版本:拇指块位置过程代码不在版本块中,如下所示。

class ImageUploader < CarrierWave::Uploader::Base
  include CarrierWave::RMagick
  ..
  #version :thumb do
  #  process :resize_to_limit => [1024, nil]
  #end

  process :resize_to_limit => [1024, nil] # added not in version block
  ..
end

问题是我不知道如何重新创建存在的原始图像文件并使用 CarrierWave 上传。

.recreate_versions!我认为该方法仅适用于版本块..

#mounted uploader above
model.list_image.recreate_versions!
# => [:store_versions!]
# original file not change

如何重新创建已经存在的原始文件?

(我不想添加版本块,因为如果添加版本块,那么每当上传图像文件时,图像文件就不止一个文件。(原始文件和特定版本文件))

【问题讨论】:

    标签: ruby-on-rails carrierwave


    【解决方案1】:

    您可以通过两种方式解决您的问题:

    1. 您可以在所有对象的循环中调用 save 事件,并在您的模型中使用 imagemagick (RMagick) 调整实际图像的大小。

      class Model < ActiveRecord::Base
        before_save do
          self.image = self.image.resize "1024x"
        end
      end
      
    2. 您将为所有图像相关数据创建新记录并销毁以前的记录。而不是使用recreate_versions 方法。

      Model.all.each { |old|
        new = Modle.new(foo_id: old.foo_id, image: old.image)
        new.save!
        old.destroy
      }
      

    【讨论】:

      猜你喜欢
      • 2019-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 2019-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多