【发布时间】:2012-01-29 05:45:39
【问题描述】:
我正在编写一个 Ruby/Rhomobile 应用程序,该应用程序获取图像,将其编码为 base64 并发送到服务器(在 ASP.NET 上运行 C#),作为更大 XML 的一部分。
但是,一旦我尝试解码 base64 并将其保存到硬盘上,生成的文件就无法作为图像使用。
这是相关的 ruby 代码:
image_element = REXML::Element.new("image")
image_element.text = Base64.encode64(open(Rho::RhoApplication::get_blob_path(self.image_uri)) { |io| io.read })
form_element.add_element(image_element)
这是我的 C# 代码:
var doc = new XmlDocument();
doc.LoadXml(Server.UrlDecode(Request.Form[0]));
var imageBase64 = doc.SelectNodes("//image")[0];
var imageBytes = imageBase64.InnerText;
using(var imgWriter = new FileStream(@"c:\img.jpg",FileMode.Create))
{
imgWriter.Write(imageBytes,0,imageBytes.Length);
}
【问题讨论】:
-
客户端图像文件肯定是JPEG格式的吗?
-
@AdamRalph 是的,绝对是 JPEG。
-
生成的服务器端文件的大小是否与原始客户端文件的大小相同?
-
如果 ruby 代码在 Windows 上运行,则尝试以二进制模式打开文件(应该适用于任何版本的 ruby)或使用 IO.binread(ruby 1.9.1 或更高版本)。跨度>
-
@joast - 二进制打开解决了这个问题。非常感谢!请将您的评论转换为答案,以便我接受。