我正在尝试验证以 Base64 字符串格式提交到后端的图像,方法是将其解析为 Image 对象,从同一 Image 对象中提取它,最后比较输入字节数组和输出字节数组,假设这两个应该相同或有一些东西输入图像错误。这是代码:
private void UpdatePhoto(string photoBase64)
{
var imageDataInBytes = Convert.FromBase64String(photoBase64);
ValidateImageContent(imageDataInBytes);
}
private void ValidateImageContent(byte[] imageDataInBytes)
{
using (var inputMem = new MemoryStream(imageDataInBytes))
{
var img = Image.FromStream(inputMem, false, true);
using (MemoryStream outputMemStream = new MemoryStream())
{
img.Save(outputMemStream, img.RawFormat);
var outputSerialized = outputMemStream.ToArray();
if (!outputSerialized.SequenceEqual(imageDataInBytes))
throw new Exception("Invalid image. Identified extra data in the input. Please upload another photo.");
}
}
}
它在我知道是有效的图像上失败了。
我的假设是否错误,即 Image.Save 的输出必须与 Image.FromStream 的输出相同?有没有办法纠正这个逻辑以正确实现这种验证方式?
慕工程0101907
相关分类