У меня проблема с использованием RMagick / ImageMagick для открытия файла, загруженного через форму Rails. Я считаю, что это связано с тем, что поведение Rails Tempfile заключается в устранении расширения файла. Из того, что я прочитал, ImageMagick должен предпочитать использовать магическое число, а не расширение файла, чтобы определить формат файла изображения, но в моей установке это не так. Я делаю это:
img = Magick::Image.read(full_size_image.path)
где full_size_image - это объект Tempfile, возвращаемый из контроллера формы загрузки, который создает ошибку вроде:
делегат без декодирования для этого формата изображения `/ var / folder / uI / uIsldaxoHkiXKWYFuTWs4 ++++ TI / -Tmp- / RackMultipart20101031-10144-1hiwlw-0 '@ error / constitute.c / ReadImage / 532
Это происходит в Mac OS X 10.6 с Rails 2.3.8, RMagick 2.13.1 и ImageMagick 6.6.5-5. Я подтвердил, что ImageMagick может преобразовать файл, который я использовал для успешного тестирования через форму загрузки, и что путь / файл временного файла действительно существует / доступен для чтения.
Я подозреваю, что либо а) что-то в моей установке ImageMagick каким-то образом мешает ему использовать магическое число для определения типа файла (?? - заставить ImageMagick работать над Snow Leopard из исходного кода было само приключением), либо б) есть только случаи, когда это не работает, и мне как-то нужно, чтобы Tempfile сохранил исходное расширение файла.
Я знаю, что могу получить исходное имя файла из объекта Tempfile, но я не нашел способа переименовать файл. Я полагаю, я мог бы создать некоторый kludge, где я использую объект File и каким-то образом создать копию Tempfile с исходным расширением, но это просто кажется неприличным. Как правильно решить эту проблему?
Спасибо за вашу помощь.