MVC将Base64字符串转换为图像,但是..系统FormatException

本文关键字:但是 系统 FormatException 图像 Base64 字符串 转换 MVC | 更新日期: 2023-09-27 18:00:43

我的控制器在以下代码中的请求对象中获得上传的图像:

[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);

然而,这给了系统。FormatException:"输入不是有效的Base-64字符串,因为它包含非Base-64字符、两个以上的填充字符或填充字符中的非法字符。"

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

MVC将Base64字符串转换为图像,但是..系统FormatException

看起来您可以从一开始就去掉"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:images/jpeg;base64,",我建议使用这种方法从base64 中删除起始字符串

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

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