2

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

但是,一旦我尝试解码 base64 并将其保存到硬盘上,生成的文件就不能用作图像。

这是相关的红宝石代码:

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);
}
4

1 回答 1

1

我会调查您对 Server.UrlDecode 的调用。看起来这可能会损坏您的数据。

根据这个 SO question,“+”号似乎特别值得关注。Server.UrlDecode 使用 HttpServerUtility.UrlDecode,这里是它的文档

于 2011-12-28T14:52:02.897 回答