1

Webサービスを使用してiPhoneから画像をアップロードしようとしていますが、次のような例外が発生しました-

{System.ArgumentException:パラメータが無効です。System.Drawing.Image.FromStream(Stream stream、Boolean useEmbeddedColorManagement、Boolean validateImageData)}で

次のコードで

string acFolder = Server.MapPath("~/Images/");
string imgname = DateTime.UtcNow.ToString().Replace(" ", "").Replace("AM", "").Replace("PM", "").Replace("/", "").Replace("-", "").Replace(":", "") + ".jpeg";

byte[] imageBytes = Convert.FromBase64String(image.Replace(" ", "+"));
MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);

// Convert byte[] to Image
ms.Write(imageBytes, 0, imageBytes.Length);
System.Drawing.Image image2 = System.Drawing.Image.FromStream(ms,true,true);
image2.Save(acFolder + imgname);

この行で例外が発生しました

   System.Drawing.Image image2 = System.Drawing.Image.FromStream(ms,true,true);
4

1 に答える 1

1

ArgumentExceptionそれがメソッドに渡された引数の1つと関係があることを考えるとFromStream

上記の2つのリンクの2番目を開くと、渡されたストリームが有効な画像形式を表していないときに発生することがドキュメントからわかります(これは、例外のParamNameプロパティArgumentExceptionを確認することで確認できます。

つまり、アップロードされている画像の形式はImageクラスでサポートされていません。それか、画像のバイトが何らかの方法でねじ込まれています。これは、独自のコードでサポートされているようです。base64文字列の「+」を「」に置き換えます。Base64は、スペースを含めることを目的としていません。そのコード行を削除してください。

アップデート

それなしでは機能しないと言っているので、データは着信'+'がスペースとして解釈される方法で渡されていると思います。そのため、データを復元しようとしています。リクエスト本文で送信された場合、これは発生しないはずです。そのため、iPhoneアプリとサーバーは、代わりにURLにModifiedbase64を使用する必要があると推測しています。

于 2012-07-05T07:45:51.790 に答える