2015-09-15 2 views
0

Я пытаюсь написать метод, который использует камень EXIFR для извлечения данных (в данном случае модели камеры) о фотографиях по мере их загрузки с использованием Carrierwave. В настоящее время метод я использую внешний вид, как это в моей модели:Carrierwave нет такого файла или каталога

before_save :get_exif_data 

     def get_exif_data 
      imgfile = EXIFR::JPEG.new(photo.filename) 

      return 

      self.model = imgfile.model 

     end 

Однако я получаю сообщение об ошибке «Нет такого файла или каталога - IMG_0953.JPG» (или другое имя файла).

Моя цель состоит в том, чтобы извлечь данные типа «камера», используя метод моделирования модели EXIFR перед сохранением. Из документации EXIFR гема:

EXIFR::JPEG.new('IMG_6841.JPG').model    # => "Canon PowerShot G3" 

ошибки подсказывает мне, что мой photo.filename до сих пор не создан. Как я могу обработать изображение до его сохранения?

ответ

1

На самом деле, что-то вроде следующих закончил работать для меня:

before_save :get_camera 

private 
    def get_camera 
     self.model = EXIFR::JPEG.new(photo.file.path).model 
    end 
end 
+0

Я считаю, что «правильный» способ - использовать «current_path». Вы хотите сделать это в загрузчике CarrierWave. Ознакомьтесь с моим модулем [carrierwave-imagesize] (https://github.com/mdchaney/CarrierWave-ImageSize) для получения дополнительной информации. –

+0

Спасибо за подсказку, Майкл. Мне было интересно, можно ли позаботиться об этом в загрузчике. Я проверю вашу ссылку. –

0

Попробуйте

EXIFR::JPEG.new(Rails.root.to_s + photo.filename_url) 

carrierwave возвращает URL-адрес выглядеть /uploads/... его относительный путь к веб-приложение, но EXIFR::JPEG будет думать, что путь системного файла

+1

Плохая идея на нескольких уровнях - полностью не работает при использовании тумана. –

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