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

时间:2013-02-22 20:25:31

标签: c# asp.net-mvc base64 form-data

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

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

    return fileName;
}

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:9)

看起来你可能只能从一开始就剥离"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,但我会尝试将其作为第一次传递。

答案 1 :(得分:5)

原因确实是&#34; data:image / jpeg; base64,&#34;,我建议使用此方法从base64中删除起始字符串

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

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