我有一个应用程序要求用户通过 Flash 上传照片。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))
任何意见是极大的赞赏。