我需要一个检查HttpPostedFileBase
是否是word文档的函数。我不想检查文件扩展名,因为用户可以更改它。
我试图读取二进制数据的标头信息,以PK
开头(例如,PDF文件以%PDF
开头),但我不知道我是否可以依赖它
[HttpPost]
public ActionResult UploadFile(HttpPostedFileBase file)
{
string header = null;
using (MemoryStream ms = new MemoryStream())
{
file.InputStream.CopyTo(ms);
ms.Position = 0;
using (StreamReader sr = new StreamReader(ms))
{
char[] buffer = new char[5];
sr.Read(buffer, 0, 4);
header =
string.Format("{0}{1}{2}{3}{4}", buffer[0], buffer[1], buffer[2], buffer[3], buffer[4]);
}
}
if (header.StartsWith("%PDF"))
{
// PDF Document
}
if (header.StartsWith("PK"))
{
// Microsoft Word Document ?
}
return Json(new { }, JsonRequestBehavior.AllowGet);
}
答案 0 :(得分:0)
word文档(DOCX)的前两个字母是PK,因为DOCX文件实际上是PKZip文件;所以不,这不可靠。
此处的ForensicsWiki页面可能有所帮助:
http://www.forensicswiki.org/wiki/Word_Document_%28DOC%29
和