如何在处理版本后使carrierwave不保存原始文件?

时间:2011-12-20 17:27:07

标签: ruby-on-rails-3 file-upload carrierwave

我正在使用CarrierWave在Rails 3.1中上传文件,我正在寻找一种节省服务器空间的方法。许多上传的照片都超过了20MB,所以在将它们处理成1024 x 1024后,我想删除原始照片。在上传器类中有没有简单的方法呢?

谢谢, --mark

5 个答案:

答案 0 :(得分:23)

我曾经有两个版本,并意识到我不需要原来的

所以没有

version :thumb do
    process :resize_to_limit => [50, 50]
  end

version :normal do
   process :resize_to_limit => [300,300]
end

我删除了:正常并添加了此

process :resize_to_limit => [300, 300]

现在原件以我需要的尺寸保存,我在服务器上没有第三个未使用的图像

答案 1 :(得分:7)

大家好! 选定的解决方案对我不起作用。 我的解决方案:

  after :store, :remove_original_file

  def remove_original_file(p)
    if self.version_name.nil?
      self.file.delete if self.file.exists?
    end
  end

答案 2 :(得分:3)

您可以在模型中定义after_save回调并删除照片..

我不知道你的模型,但如果你自定义它可能会有效:

class User << ActiveRecord::Base

  after_create :convert_file
  after_create :delete_original_file

  def convert_file
    # do the things you have to do
  end 

  def delete_original_file
    File.delete self.original_file_path if File.exists? self.original_file_path
  end
end

答案 3 :(得分:1)

class FileUploader < CarrierWave::Uploader::Base

  after :store, :delete_original_file

  def delete_original_file(new_file)
    File.delete path if version_name.blank?
  end

  include CarrierWave::RMagick

  storage :file
  .
  . # other configurations

end

答案 4 :(得分:0)

这有点黑客但具有性能优势

my_uploader.send :store_versions!, open(my_file)