如何将UlImage作为Base64字符串传递给Asp.Net Web Api

时间:2017-03-21 11:36:18

标签: c# ios asp.net-web-api swift3

我有以下iOS 10 Swift 3代码

if let pic = info[UIImagePickerControllerOriginalImage] as? UIImage {
    let sss = UIImagePNGRepresentation(pic)! as NSData
    let s1 = sss.base64EncodedString(options: .lineLength64Characters)
    // api call .....
}

在C#Web API中我正在做以下

byte[] imageBytes = Convert.FromBase64String(defultdr["@imageString"]);
MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);
// Convert byte[] to Image
ms.Write(imageBytes, 0, imageBytes.Length);
Image image = Image.FromStream(ms,true);
image.Save(ImageDirPath + defultdr["@imageName"]);

其中defultdr["@imageString"]包含来自iOS Wwift 3的Base64字符串的图像数据

但是我遇到了异常

  

参数无效。

     

at System.Drawing.Image.FromStream(Stream stream,Boolean   useEmbeddedColorManagement,Boolean validateImageData)at   System.Drawing.Image.FromStream(Stream stream)at   TWebApiSearch.Controllers.UploadController.ImageToDir(TRequest json)   在   C:\ Users \用户tahmid \下载\ APIWeb \ TWebApiSearch \ \控制器UploadController.cs:行   53

在Web API C#

中的这一行
Image image = Image.FromStream(ms,true);

此错误的原因是什么?

1 个答案:

答案 0 :(得分:2)

您正在加载内存流两次。一旦你初始化它

MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);

,第二次写作时。

ms.Write(imageBytes, 0, imageBytes.Length);

不需要第二个,因为在使用字节数组初始化时已经加载了内存流缓冲区。

试试这个

var imageBytes = Convert.FromBase64String(defultdr["@imageString"]);
var ms = new MemoryStream(imageBytes);
var image = Image.FromStream(ms,true);
image.Save(ImageDirPath + defultdr["@imageName"]);