如何解决Razor 页面 IFormFile .Net 5.0 附件头验证
我使用 .Net 5.0 (Razor Pages) 和 IFormFile 上传用户图像,在 ASP.NET 中我用来验证文件的标题以确保上传的文件有效,例如不更改 EXE将文件扩展名转换为 Jpg 并将其上传,以便帮助验证 IFormFile 的标题吗?
ASP.NET 中使用的函数:我需要在 Razor Pages 中实现
public string validateFiletoUpload(FileUpload objFile)
{
string errorMessagetoReturn = string.Empty;
// DICTIONARY OF ALL IMAGE FILE HEADER
Dictionary<string,byte[]> imageHeader = new Dictionary<string,byte[]>();
imageHeader.Add("JPG",new byte[] { 0xFF,0xD8,0xFF,0xE0 });
imageHeader.Add("JPEG",0xE0 });
imageHeader.Add("PDF",new byte[] { 0x25,0x50,0x44,0x46 });
imageHeader.Add("DOCX",new byte[] { 0x50,0x4B,0x03,0x04 });
imageHeader.Add("DOC",new byte[] { 0xD0,0xCF,0x11,0xE0 });
imageHeader.Add("MSG",0xE0,0xA1,0xB1,0x1A,0xE1 });
byte[] header;
string fileExt;
fileExt = objFile.FileName.Substring(objFile.FileName.LastIndexOf('.') + 1).toupper();
byte[] tmp;
try
{
tmp = imageHeader[fileExt];
header = new byte[tmp.Length];
}
catc
{
errorMessagetoReturn = "Invalid File.";
return errorMessagetoReturn;
}
objFile.FileContent.Read(header,header.Length);
if (CompareArray(tmp,header))
{
errorMessagetoReturn = string.Empty;
}
else
{
errorMessagetoReturn = "Invalid ." + fileExt + " file.";
}
return errorMessagetoReturn;
}
private bool CompareArray(byte[] a1,byte[] a2)
{
if (a1.Length != a2.Length)
return false;
for (int i = 0; i < a1.Length; i++)
{
if (a1[i] != a2[i])
return false;
}
return true;
}
解决方法
使用下面代替 objFile.FileContent.Read(header,header.Length) 解决了;
if (objFile.Length > 0)
{
using (var ms = new MemoryStream())
{
objFile.CopyTo(ms);
var fileBytes = ms.ToArray();
for (int i = 0; i < header.Length; i++)
{
header[i] = fileBytes[i];
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。