Как я могу сделать так, чтобы carrierwave не сохраняла исходный файл после обработки версий? - PullRequest
8 голосов
/ 20 декабря 2011

Я использую CarrierWave для загрузки файлов в Rails 3.1 и ищу способ сэкономить место на сервере. Размер загружаемых фотографий превышает 20 МБ, поэтому после их обработки до 1024 x 1024 я хотел бы удалить оригинал. Есть ли простой способ сделать это в классе загрузчика?

Спасибо, --Mark

Ответы [ 5 ]

23 голосов
/ 04 апреля 2012

Раньше у меня было две версии, и я понял, что оригинал не нужен

Так что вместо

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]

Теперь оригинал сохранен в нужном мне размере, и у меня нет третьего неиспользуемого изображения на сервере

7 голосов
/ 05 сентября 2013

все! Выбранное решение не работает для меня. Мое решение:

  after :store, :remove_original_file

  def remove_original_file(p)
    if self.version_name.nil?
      self.file.delete if self.file.exists?
    end
  end
3 голосов
/ 21 декабря 2011

Вы можете определить обратный вызов 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
1 голос
/ 06 марта 2012
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
0 голосов
/ 04 декабря 2013

Это немного взломать, но имеет преимущество в производительности

my_uploader.send :store_versions!, open(my_file)
...