Asp.net检查HttpPostedFileBase是否是Word文档

时间:2014-01-11 10:06:10

标签: asp.net asp.net-mvc ms-word

我需要一个检查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);
}

1 个答案:

答案 0 :(得分:0)

word文档(DOCX)的前两个字母是PK,因为DOCX文件实际上是PKZip文件;所以不,这不可靠。

此处的ForensicsWiki页面可能有所帮助:

http://www.forensicswiki.org/wiki/Word_Document_%28DOC%29

http://www.forensicswiki.org/wiki/DOCX