参数无效异常

时间:2012-07-05 07:37:02

标签: c#

我尝试使用网络服务从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);

1 个答案:

答案 0 :(得分:1)

鉴于它是ArgumentException,它与传递给FromStream方法的其中一个参数有关。

如果你打开上面两个链接中的第二个,你会从文档中看到,当传递的流不代表有效的图像格式时会引发ArgumentException(你可以通过检查异常的{{ {3}}属性。

这意味着Image类不支持正在上传的图像格式。无论是那个,还是图像的字节都以某种方式被搞砸了。这似乎是由您自己的代码支持的 - 您可以在基本64字符串中将'+'替换为''。 Base64不打算在其中包含空格 - 取出那行代码。

更新

因为你说没有它它不起作用 - 我猜测数据是以传入的'+'被解释为空格的方式传递的,这就是你试图恢复它们的原因。如果在请求正文中发送,则不应该发生这种情况,因为我猜测iPhone应用程序,而您的服务器需要使用ParamName