【问题标题】:Ruby base64 to C# base64Ruby base64 到 C# base64
【发布时间】: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 - 二进制打开解决了这个问题。非常感谢!请将您的评论转换为答案,以便我接受。

标签: c# ruby base64 rhomobile


【解决方案1】:

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

根据this SO question,“+”号似乎特别值得关注。 Server.UrlDecode 使用 HttpServerUtility.UrlDecode 和 here's the documentation for it

【讨论】:

  • 谢谢!这实际上有助于取得一些进展,但不幸的是还不够。我已经删除了 urlencoding,现在字节以与发送相同的方式到达。但是,生成的图像与我开始使用的图像不同。
  • 另外,似乎 base64 编码/解码产生相同的字节,所以可能是发送的字节首先是错误的。
  • 这部分我不确定,但您的问题可能会出现,因为您使用的是 IO.open 而不是 File.open。
猜你喜欢
  • 2018-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-10
相关资源
最近更新 更多