2011-12-28 94 views
2

我正在编写一个Ruby/Rhomobile应用程序,该应用程序将图像编码为base64,并将其作为更大XML的一部分发送给服务器(即在ASP.NET上运行C#)。Ruby base64到C#base64

但是,一旦我尝试解码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); 
} 
+0

是客户端图像文件绝对是JPEG? – 2011-12-28 14:46:47

+0

@AdamRalph是的,绝对是一个JPEG。 – Svarog 2011-12-28 15:32:48

+0

是生成的服务器端文件的大小与原始客户端文件的大小相同吗? – 2011-12-28 17:17:07

回答

1

我会调查你对Server.UrlDecode电话。看起来这可能会破坏你的数据。

看起来像“+”号是特别关注的,每this SO question。 Server.UrlDecode使用HttpServerUtility.UrlDecode和here's the documentation for it

+0

谢谢!这实际上有助于取得一些进展,但不幸的是还不够。我已经删除了urlencoding,现在字节以与发送相同的方式到达。但是,由此产生的图像与我开始的图像不同。 – Svarog 2011-12-28 15:30:38

+0

此外,由于base64编码/解码似乎产生相同的字节,因此可能发送的字节是错误的。 – Svarog 2011-12-28 15:33:24

+0

这部分我不确定,但是您的问题可能会因为您使用IO.open而不是File.open而出现。 – raynjamin 2011-12-28 16:02:56