En realidad, esta pregunta tiene mucho más de lo que usted cree. Solo desde Ruby 1.9 ha habido un concepto de caracteres (en algunas codificaciones) versus bytes crudos. Por lo tanto, en Ruby 1.9 es posible que puedas salirte con la suya solicitando la codificación. Como está recibiendo material de LDAP, la codificación de las cadenas que entran debería ser bien conocida, muy probablemente ISO-8859-1 o UTF-8.
En cuyo caso, se puede obtener la codificación y actuar sobre lo siguiente:
some_variable.encoding # => when ASCII-8BIT, treat as a photo
Puesto que usted realmente desea verificar que los datos binarios es una foto, que tendría sentido para ejecutarlo a través de una biblioteca de imágenes. RMagick viene a la mente. El documentation le mostrará cómo verificar que cualquier dato binario esté codificado en JPEG. También podrá almacenar otras propiedades, como ancho y alto.
Si no tiene instalado RMagick, un enfoque alternativo sería guardar los datos en un Tempfile, desplegarlos en Unix (suponiendo que esté en Unix) e intentar identificar el archivo. Si su sistema tiene instalado ImageMagick, el comando identify
le informará todo sobre las imágenes. Pero sólo llamar file
en él le dirá esto también:
~/Pictures$ file P1020359.jpg
P1020359.jpg: JPEG image data, EXIF standard, comment: "AppleMark"
es necesario llamar a los comandos identify
y file
en un shell from Ruby:
%x(identify #{tempfile})
%x(file #{tempfile})
Por cierto, conseguir la codificación directamente desde el won variables No funciona si los datos JPEG están codificados en un formato de cadena como Base64. –
Explicación impresionante. Por ahora, simplemente estoy usando '.encoding.name! = 'ASCII-8BIT'', que funcionará bien hasta que decida volverme más elaborado más tarde. Muchas gracias por una respuesta más que completa. –
¡Estoy feliz de ayudar! –