2016-09-19 1 views
9

Я создаю изображение большого пальца для файлов, загруженных в мое приложение. Имена изображений имеют в них код метки времени. Когда я запускаю recreate_versions, у созданного большого пальца также есть метка времени, но он использует текущую временную метку, которая делает имя изображения большого пальца отличным от исходного имени файла.Carreirwave - Как получить имя версии, созданное непосредственно из сохраненного имени файла

Поэтому я решил, что исправление будет состоять в том, чтобы иметь собственное имя файла для большого пальца. В основном есть «thumb_» + «оригинальное имя файла».

version :thumb do 
    process :resize_to_limit => [110, nil] 

    def full_filename(for_file = model.image_value.file) 
    'thumb_' + File.basename(model.image_value.path).to_s 
    end 
    end 

    def filename(for_file = model.image_value.file) 
    "#{model.id}" + "-v#{timestamp}" + "-" + "#{model.name}" + ".png" if original_filename.present? 
    end 

    def timestamp 
    var = :"@#{mounted_as}_timestamp" 
    model.instance_variable_get(var) or model.instance_variable_set(var, Time.now.to_i) 
    end 

Это казалось легко исправить, но по какой-то причине, когда я бегу recreate_versions большого пальца изображение генерируется с текущей меткой времени в нем, а не метки времени во имя исходного файла. Из того, что я понимаю, он должен захватить значение, хранящееся в БД, являющееся сырым именем файла, и добавить его в конец «thumb_». Но каким-то образом его изменение метки времени в названии.

stored filename      =  1-v1474175808-model-name.png 
Item.find(1).image_value_url(:thumb) = thumb_1-v1474175808-model-name.png #this works correctly and looks for the correct filename 
thumb filename saved     = thumb_1-v1472111618-model-name.png #thumb saved is different. For some reason has a different timestamp in name 

Я думал, что, может быть, def full_filename Isnt бежится, но если я изменить его на что-то другое имя файла большого пальца сохранен изменяется на то, что в def full_filename.

Не уверен, что здесь происходит. надеюсь, кто-то может помочь. Если это выглядит так, как должно работать, сообщите мне, по крайней мере, что выяснит, что это может быть то, на что я не смотрю.

ответ

1

Законченное того, чтобы использовать сгенерированный URL и используя slice! на URL, чтобы оставить только имя изображения.

version :thumb do 
    process :resize_to_limit => [110, nil] 

    def full_filename(for_file = model.image_value.file) 
     raw_file_name = model.image_value.slice!(0..65) 
    'thumb_' + raw_file_name 
    end 

    end 
0

Я не понимаю, почему вы используете instance_variable_get и set. Почему бы просто не использовать Itemcreated_at? Тогда это никогда не изменится.

def timestamp  
    model.created_at 
end 
+0

Поскольку имя должно быть изменено и быть uniq, когда изображение обновляется. – Rob

+0

Итак, вам нужны все версии, чтобы иметь новое уникальное имя? – Benjamin

+0

Нет версий просто нужно иметь то же имя, что и исходный файл, но с добавлением «thumb_» к его имени. – Rob