ESD*_*tor 6 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;
}
Run Code Online (Sandbox Code Playgroud)
image的值(至少在它的开头)看起来很像这样:
data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEAYABgAAD/7gAOQWRvYmUAZAAAAAAB/...
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下内容进行转换:
byte[] bImage = Convert.FromBase64String(image);
Run Code Online (Sandbox Code Playgroud)
但是,这会产生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
}
Run Code Online (Sandbox Code Playgroud)
当然你可能想要使这个特定于JPEG特定,但我会尝试这是第一次通过.
原因确实是"data:image/jpeg; base64",我建议使用这种方法从base64中删除起始字符串
var base64Content = image.Split(',')[1];
byte[] bImage = Convert.FromBase64String(base64Content);
Run Code Online (Sandbox Code Playgroud)
这是最短的解决方案,您不必使用魔术字符串,也不必编写正则表达式.
| 归档时间: |
|
| 查看次数: |
6492 次 |
| 最近记录: |