在特定的Rails应用程序中,我将二进制数据从LDAP中提取到一个变量中进行处理。有没有办法检查变量是否包含二进制数据?如果它不是二进制的,我不想继续处理这个变量。我期望使用is_a?
...Rails:可能检查一个字符串是二进制的吗?
实际上,我从LDAP中提取的二进制数据是一张照片。所以也许有更好的方法来确保变量包含二进制JPEG数据?此检查的结果将决定是继续处理JPEG数据,还是从磁盘渲染默认JPEG。
在特定的Rails应用程序中,我将二进制数据从LDAP中提取到一个变量中进行处理。有没有办法检查变量是否包含二进制数据?如果它不是二进制的,我不想继续处理这个变量。我期望使用is_a?
...Rails:可能检查一个字符串是二进制的吗?
实际上,我从LDAP中提取的二进制数据是一张照片。所以也许有更好的方法来确保变量包含二进制JPEG数据?此检查的结果将决定是继续处理JPEG数据,还是从磁盘渲染默认JPEG。
实际上这个问题比你想象的要多得多。只有在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',它可以正常工作,直到我决定稍后再详细阐述。非常感谢这样一个非完整的答案。 –
我很乐意提供帮助! –