C# Fromstream流异常";参数无效";将.webp重命名为.jpg时
我使用以下代码将上载的图像保存到ASP.Net Core 3.1 web应用程序中的wwwroot目录:C# Fromstream流异常";参数无效";将.webp重命名为.jpg时,c#,asp.net-core,C#,Asp.net Core,我使用以下代码将上载的图像保存到ASP.Net Core 3.1 web应用程序中的wwwroot目录: var files = HttpContext.Request.Form.Files; int filesCount = files.Count; //Some codes here //Check for type of file: only jpg and png are accepted for (int i = 0; i < filesCount; i++) {
var files = HttpContext.Request.Form.Files;
int filesCount = files.Count;
//Some codes here
//Check for type of file: only jpg and png are accepted
for (int i = 0; i < filesCount; i++)
{
string extension = Path.GetExtension(files[i].FileName).ToLower();
if (extension == ".jpg" || extension == ".png")
{//Some codes here}
}
//some codes here
for (int i = 0; i < filesCount; i++)
{
using (var stream = files[i].OpenReadStream())
{
try
{
using (var img = Image.FromStream(stream))
{
img.ScaleAndCrop(500, 500)
.SaveAs($"wwwroot\\images\\items\\" + fileName + i + ".jpg", 45);
}
}
catch (Exception message)
{
string exceptionMessgae = message.ToString();
}
}
}
var files=HttpContext.Request.Form.files;
int filescont=files.Count;
//这里有一些代码
//检查文件类型:仅接受jpg和png
对于(int i=0;i
它工作正常,当客户端用户上传.webp
图像时,代码拒绝正确保存图像,但问题是当客户端手动将Image1.webp
重命名为Image1.jpg
然后上传时,系统接受.jpg文件并继续使用(var img=image.FromStream(stream))它传递异常消息,并显示为“参数无效”且图像不保存。
我不明白,如果重命名后上传的图像不是.jpg,那么为什么它会传递到保存代码,如果是.jpg,为什么它不能保存
更多信息:即使我将
test.dll
文件重命名为test.jpg
文件并将其上载,问题仍然存在。我需要代码来防止接受重命名和伪造的.jpg
一个(真实)jpg文件的前三个字节是(十六进制)FF D8 FF
这也称为,用于:89 50 4e 47 0d 0a 1a 0a
GetMimeType仅使用扩展名(可能重命名)在内部数据库中查找mimetype(可能不完整)。Windows资源管理器也仅使用扩展名获取要显示的文件类型
要读取这个神奇的数字,您不必将整个文件读入字节数组,只需读入前几个字节。前几个字节可能会将该文件识别为真实的jpg图像。请检查是否存在相同的
获取Mime类型
?如果没有,我将感谢获得一些关键字来找到答案。