MVC将Base64字符串转换为Image,但是…… System.FormatException

我的控制器在此代码中的请求对象中获取上传的图像:

[HttpPost] public string Upload() { string fileName = Request.Form["FileName"]; string description = Request.Form["Description"]; string image = Request.Form["Image"]; return fileName; } 

image的值(至少在它的开头)看起来很像这样:

 data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEAYABgAAD/7gAOQWRvYmUAZAAAAAAB/... 

我尝试使用以下内容进行转换:

 byte[] bImage = Convert.FromBase64String(image); 

但是,这会产生System.FormatException:“输入不是有效的Base-64字符串,因为它包含非基本64个字符,两个以上的填充字符或填充字符中的非法字符。”

我觉得问题是至少字符串的开头不是base64,但对于我所知道的一切都不是。 在解码之前我需要解析字符串吗? 我错过了完全不同的东西吗?

看起来你可能只能从头开始删除"data:image/jpeg;base64,"部分。 例如:

 const string ExpectedImagePrefix = "data:image/jpeg;base64,"; ... if (image.StartsWith(ExpectedImagePrefix)) { string base64 = image.Substring(ExpectedImagePrefix.Length); byte[] data = Convert.FromBase64String(base64); // Use the data } else { // Not in the expected format } 

当然你可能想要使这一点不那么特定于JPEG,但我会尝试这是第一次通过。

原因确实是“data:image / jpeg; base64”,我建议使用这种方法从base64中删除起始字符串

 var base64Content = image.Split(',')[1]; byte[] bImage = Convert.FromBase64String(base64Content); 

这是最短的解决方案,您不必使用魔术字符串,也不必编写正则表达式。