Разные расширения файлов для разных версий - PullRequest
5 голосов
/ 13 марта 2011

Я использую carrierwave для загрузки изображений.Мне нужно, чтобы версия основного изображения оставалась в исходном формате, но другие версии нужно преобразовать в gif.

В данный момент я делаю что-то вроде этого:

 def filename
   change_ext_to_gif(super)
 end

 def change_ext_to_gif(ext)
   ext.chomp(File.extname(ext)) + ".gif"
 end

 version :preview do
   process :resize_to_fill => [60, 60]
   process :convert => "gif"
 end

 version :full do
   process :resize_to_limit => [320, 320]
   process :convert => "gif"
 end

 version :mobile do
   process :resize_to_limit => [72, 96]
   process :convert => "gif"
 end

Конечно,это также меняет расширение моего исходного файла.Есть ли способ решить это?Я думаю, мне нужно переопределить некоторые методы в блоках версии.Но я не смог выяснить их (я попытался переопределить имя файла и URL, это помогает, но предотвращает удаление файлов версии).

1 Ответ

6 голосов
/ 17 августа 2011

Вы можете изменить имя файла, которое используется для каждой версии, примерно так:

 version :mobile do
   process :resize_to_limit => [72, 96]
   process :convert => "gif"
   def full_filename(for_file = model.logo.file)
     "fiename here"
   end
 end

Так что просто оставьте оригинальное имя файла, как вам нужно, и затем измените его для каждой версии.В вики есть еще примеры:

https://github.com/jnicklas/carrierwave/wiki/How-To%3A-Move-version-name-to-end-of-filename%2C-instead-of-front

...