Ruby:将二进制字符串(7zip)写入文件。文件被破坏了

时间:2017-03-28 15:18:23

标签: ruby-on-rails ruby file binary 7zip

我们正在Ruby on Rails 4上构建一个应用程序,除了这个令人痛苦的问题外,它真的很流利

在我们的应用程序中,我们从SOAP请求中获取Multipart响应。此响应来自外部方并向我们发送7zip压缩文件。响应有2个部分,其中第二部分包含application / octet-stream。

部件属于Mail:部件类型。

当我保存' part.body.decoded'的内容时到文件,我无法用7zip打开文件,因为它说文件已损坏。

当我在十六进制编辑器中打开生成的文件时,第一行似乎没问题。

p part.body.decoded.encoding.name # gives => "ASCII-8BIT"

File.open("file.7z", "wb") do |f|
 f.write(part.body.decoded)
end

以下是第一批HEX线。

37 7A BC AF 27 1C 00 03 EF F2 1B 17 EA FA 03 00
00 00 00 00 68 00 00 00 00 00 00 00 BD D9 66 08
00 1E 10 88 27 43 3B A7 F5 C7 75 19 5D F6 A6 E0

作为测试,我自己创建了一个7z文件,并用字符串读取并将其写回文件。这有效,并给了我一个有效的7zip。

关于如何解决这个问题的任何想法?

更新:当我将part.body.decoded的内容放入字符串中时 str = part.body.decoded#并放入字符串 p str#我得到如下的字符串(我删除了字符串的中间部分,因为它有很多字符在这里发布)

"7z\xBC\xAF'\x1C\x00\x03\xFCpd\x01\xEA\xFA\x03\x00\x00\x00\x00\x00h\x00\x00\x00\x00\x00\x00\x006E\x91\x1F\x00\x1E\x10\x88'C;\xA7\xF5\xC7u\x19]\xF6\xA6\xE0\xACC\xD9\xA4\xA0:,4\xE9\xA1\xAD%\x05\\a\xFBq\xA4Z\xEC7\xCC\x8C\x91\xBC?\x80H)\xFBa\xB8\xB8u\xBE\xB2\x1C|`\xA7P|\xC3\xA9\x82\xB3\r\n\xA2\x15\xA2\xDAn\xBB\xB9

1 个答案:

答案 0 :(得分:1)

解决:-) Savon 2 Soap Gem取决于Mail Gem(最高版本2.5)。在Mail gem中有一个错误,它接触原始二进制响应(它广告行结束)。我已经分叉了Mail gem并进行了调整(可以在更高版本的Mail(Savon不使用)中找到)并将'my'Mail gem添加到我的gemfile中。 Thnx向所有评论者提供他们的提示!