1

我尝试使用网络服务从 iPhone 上传图像,但出现异常,例如 -

{System.ArgumentException:参数无效。在 System.Drawing.Image.FromStream(流流,布尔值 useEmbeddedColorManagement,布尔值 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与传递给该FromStream方法的参数之一有关。

如果您打开上面两个链接中的第二个,您将从文档中看到ArgumentException当传递的流不代表有效的图像格式时引发 an(您可以通过检查异常的ParamName属性来确认这一点。

这意味着Image该类不支持正在上传的图像格式。要么,要么图像的字节以某种方式被搞砸了。您自己的代码似乎支持这一点 - 您在 base 64 字符串中将 '+' 替换为 ' '。Base64 不打算在其中包含空格 - 去掉那行代码。

更新

既然你说没有它就行不通 - 我猜数据是以一种传入'+'被解释为空间的方式传递的,这就是你试图恢复它们的原因。如果在请求正文中发送这不应该发生,所以因为我猜测 iPhone 应用程序和您的服务器需要使用修改后的 base64 来代替 URL。

于 2012-07-05T07:45:51.790 回答