将PNG字符串解析为Ruby文件

时间:2014-01-23 07:43:41

标签: ruby

如何将字符串格式的PNG(如下所示)解析为Ruby中的文件?

\x89PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x01,\x00\x00\

添加我在评论中留下的更多详细信息。

如果PNG存在于文件系统上,我可以使用File.open打开该文件。我想要File.open创建相同的对象,但我需要从字符串创建它,而不是文件系统。

最终,我想将其分配给Paperclip附件并让它将对象识别为png。

2 个答案:

答案 0 :(得分:3)

File只是IO的一个实现。 Ruby有另一个IO实现,它可以读/写被调用的字符串,显然是StringIO

file = StringIO.new("\x89PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x01,\x00\x00\")

您的评论建议您需要使用paperclip。在这种情况下,paperclip通常(取决于版本)需要文件名和mime类型,因此在将文件分配到回形针附件属性之前添加它们。

file.content_type = "image/png"
file.original_filename = "image.png"
object.attachment = file

以上适用于最新的回形针。仍然比写入临时文件更好。

答案 1 :(得分:2)

您可以使用StringIO

s = "\x89PNG\r\n..."
file = StringIO.new(s)

或者,您可以使用Tempfile(如果您想要真正的文件对象):

require 'tempfile'

file = Tempfile.new('png')
file.write "\x89PNG\r\n..."
file.rewind # move position pointer to the beginning of the file