我尝试使用网络服务从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);
答案 0 :(得分:1)
鉴于它是ArgumentException
,它与传递给FromStream
方法的其中一个参数有关。
如果你打开上面两个链接中的第二个,你会从文档中看到,当传递的流不代表有效的图像格式时会引发ArgumentException
(你可以通过检查异常的{{ {3}}属性。
这意味着Image
类不支持正在上传的图像格式。无论是那个,还是图像的字节都以某种方式被搞砸了。这似乎是由您自己的代码支持的 - 您可以在基本64字符串中将'+'替换为''。 Base64不打算在其中包含空格 - 取出那行代码。
更新
因为你说没有它它不起作用 - 我猜测数据是以传入的'+'
被解释为空格的方式传递的,这就是你试图恢复它们的原因。如果在请求正文中发送,则不应该发生这种情况,因为我猜测iPhone应用程序,而您的服务器需要使用ParamName。