2011-12-28 5 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ですか? –

+0

@AdamRalphはい、間違いなくJPEGです。 – Svarog

+0

は、元のクライアント側ファイルと同じ結果のサーバー側ファイルのサイズですか? –

答えて

1

私はServer.UrlDecodeにお電話を調査するでしょう。あなたのデータを壊す可能性があります。

「+」記号が具体的な懸念事項であるようです(this SO question)。 Server.UrlDecodeはHttpServerUtility.UrlDecodeとhere's the documentation for itを使用します。

+0

ありがとう!それは実際にいくらか進歩を助けましたが、残念ながら十分ではありませんでした。私はurlencodingを削除しました。そして今バイトは送られたのと同じ方法で到着します。しかし、結果として得られる画像は、私が始めたのと同じ画像ではありません。 – Svarog

+0

また、base64エンコーディング/デコードでは同じバイトが生成されるように見えるので、最初に送られたバイトが間違っていた可能性があります。 – Svarog

+0

この部分はわかりませんが、File.openではなくIO.openを使用しているため、問題が発生する可能性があります。 – raynjamin

関連する問題