На самом деле на этот вопрос гораздо больше, чем вы думаете. Только с Ruby 1.9 появилась концепция символов (в некотором кодировании) по сравнению с необработанными байтами. Таким образом, в Ruby 1.9 вам, возможно, удастся запросить кодировку. Поскольку вы получаете материал из LDAP, кодировка для входящих строк должна быть хорошо известна, скорее всего, ISO-8859-1 или UTF-8.
В этом случае вы можете получить кодирование и акт о том, что:
some_variable.encoding # => when ASCII-8BIT, treat as a photo
Поскольку вы действительно хотите, чтобы убедиться, что двоичные данные фото, было бы целесообразно, чтобы запустить его через библиотеку изображений. RMagick приходит на ум. documentation покажет вам, как проверить, что любые двоичные данные фактически закодированы в формате JPEG. Затем вы сможете сохранять другие свойства, такие как ширина и высота.
Если у вас нет установленного RMagick, альтернативный подход состоял в том, чтобы сохранить данные в Tempfile, спуститься в Unix (при условии, что вы находитесь в Unix) и попытаться определить файл. Если ваша система установлена ImageMagick, команда identify
расскажет вам обо всех изображениях. Но просто звоню file
на нем будет сказать вам это тоже:
~/Pictures$ file P1020359.jpg
P1020359.jpg: JPEG image data, EXIF standard, comment: "AppleMark"
Вам нужно вызвать команды identify
и file
в shell from Ruby:
%x(identify #{tempfile})
%x(file #{tempfile})
Кстати, получить кодировку непосредственно из переменной воны Работает, если данные JPEG закодированы в строковый формат, такой как Base64. –
Удивительное объяснение. На данный момент я просто использую '.encoding.name! = 'ASCII-8BIT'', который будет работать нормально, пока я не решит более подробно остановиться позже. Спасибо за тонну за такой более чем полный ответ. –
Я рад помочь! –