2014-01-30 5 views
0

У меня есть ArtworkUploader, и я хочу создать дубликат изображения обложки в том же каталоге. Помогите мне решить эту проблему.Скопировать изображение carrierwave

Мой Uploader:

class ArtworkUploader < CarrierWave::Uploader::Base 
    def store_dir 
    if model 
     "uploads/#{model.class.to_s.underscore}/#{model.id}/#{mounted_as}" 
    end 
    end 

    def filename 
    "artwork.png" 
    end 
end 

Я попытался с консоли, но это не работает. Что мне здесь не хватает?

консоли:

> u = User.find(5) 
> u.artwork.create(name: "testing.png", file: u.artwork.path) 
> NoMethodError: undefined method `create!' for /uploads/5/artwork/Artwork:ArtworkUploader 
+0

Что значит копировать, вы имеете в виду изменить существующий файл, который уже загружен – Viren

+0

Я хочу получить изображение с моим настроенным файловым именем вместе с исходным файлом. – Mano

+0

почему бы не создать другой файл и применить к нему тот же самый загрузчик – Viren

ответ

0

есть 2 способа я могу думать вы можете сделать это

а) VIA Versioning: создать версию файла

version: copy_file do 
     process :create_a_copy 
    end 

и теперь просто определите метод create_a_copy внутри вашего загрузчика, который просто вернет тот же файл

Таким образом, вы можете иметь копию файл .I не поняли ваши custom filename вещей, но так, как вы должны определить это ваш для загрузчика filename метода вы можете сделать то же самое для version, а что-то вроде этого

version: copy_file do 
     process :create_a_copy 
     def filename 
      "testing.png" 
     end 
     end 

ПРИМЕЧАНИЕ: Не уверен в имени файла вещи для версии файла, так как я сделал это долго назад, но я считаю, что описанная выше настройка различных filename метод будет работать.

Adavantage:

  • всех файлов и копирования объединены в одном пользователя
  • Никаких дополнительных столбцов не требуется базы данных (который необходим в подходе б)

Теперь вышеописанный подход слишком имеют некоторые оговорки

  • Немного сложнее
  • Одно удаления проблемы, удаление в добавившем удалят свою копию, а

б) через отдельные колонны: Они другой пути вы можете добиться того, что является определяющим отдельным столбцом artwork_copy и смонтировать такой же загрузчик с только немного изменить в пользователя, как этот

def filename 
    if self.mounted_as == :artwork 
     "artwork.png" 
    else 
     "testing.png" 
    end 
    end 

И, как вы вложите файл (дайте, что файл хранится в локально)

u = User.find(5) 
u.artwork_copy = File.open(u.artwork) ## Just cross check 
u.save 

Существует другое, как вы делаете это с помощью сделать выше же

u = User.find(5) 
    u.artwork_copy.store!(File.open(u.artwork)) 

Теперь это довольно очевидно, что преимущество/недостаток упоминания подхода б выше

Надеются, что это имеет смысл

Смежные вопросы