ユーザーにフラッシュ経由で写真をアップロードするように求めるアプリケーションがあります。次に、Flashはこの写真をバイト配列に変換します。そのコードは次のとおりです。
var rect:Rectangle=new Rectangle(0,0,imageWidth,imageHeight);
// create BitmapData
var bmd:BitmapData=new BitmapData(imageWidth,imageHeight,true,0);
bmd.draw(myMovieClip);// get the image out of the MovieClip
// create byte array
var binaryData:ByteArray = new ByteArray();
binaryData.position=0;// start at the beginning
binaryData.writeBytes(bmd.getPixels(rect));
バイト配列が作成されると、base64でエンコードされ、.ashxハンドラーを格納するIISサーバーに送信されます。ハンドラーのProcessRequestメソッドでは、次のコードを使用してデータをファイルに書き込みます。
try
{
// Convert from base64string to binary array and save
byte[] contents = Convert.FromBase64String(encodedData); //encodedData is the Base64 encoded byte array from flash
File.WriteAllBytes(fullPath, (byte[])contents);
context.Response.Write("result=1");
}
catch (Exception ex)
{
context.Response.Write("errMsg=" + ex.Message + "&result=0");
}
ここまでは順調ですね。これまでは問題ありません。
この問題は、ファイルに保存されているバイトデータを取得し、C#でサーバー側でイメージを再作成しようとした後に発生します。
私が次のことを試してみると:
try
{
var fileBytes = File.ReadAllBytes(path);
Bitmap bmp;
using (var ms = new MemoryStream(fileBytes))
{
ms.Position = 0;
using (var i = Image.FromStream(ms, false, true))
{
bmp = new Bitmap(i);
}
}
}
catch (Exception ex)
{
//error: ex.Message is always “the parameter is not valid”
}
プログラムは常にこの行に「パラメータが無効です」というメッセージを表示します</p>
using (var i = Image.FromStream(ms, false, true))
アドバイスをいただければ幸いです。