ASP.NET如何检查文件类型的类型而不管扩展名

时间:2010-08-11 12:35:07

标签: c# asp.net

如果有人将任何文件(excel除外)的扩展名重命名为xls和xlsx(请不要问我为什么:-(),我需要检查它的有效性(如果那仍然是一个有效的excel文件)。我我正在使用mime类型而且它不起作用。我错过了什么吗?

const string excel2007MimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
const string excel2003MimeType = "application/vnd.ms-excel";

  string excelExtention = string.Empty;
            excelExtention = System.IO.Path.GetExtension(myFilePath.PostedFile.FileName).ToLower();
            string mimeType = myFilePath.PostedFile.ContentType;
            Response.Write("mime type" + mimeType + Environment.NewLine);
            if( 
                 (
                    !(excelExtention == ".xls" && mimeType == excel2003MimeType)
                    ||
                    !(excelExtention == ".xlsx" && mimeType == excel2007MimeType)
                 )
              )
            {
                Response.Write ("only excel file is permitted");
            }

我将jpg文件重命名为xlsx文件并上传。如果我打印出变量mimetype,其值为“application / vnd.openxmlformats-officedocument.spreadsheetml.sheet”。我不确定为什么因为内容不是excel文件。它的形象。

2 个答案:

答案 0 :(得分:3)

为此,您需要尝试使用Excel库或Excel COM对象本身打开它。不幸的是,Microsoft不支持服务器环境中的Office COM对象自动化。

您可以只读取文件的第一部分并检查二进制签名,但支持所有可能的XLS版本需要做很多工作。和.XSLX文件只是包含多个部分文档的ZIP文件。

希望有所帮助。

答案 1 :(得分:3)

您可以随时使用Excel OleDB Database driver并尝试打开OleDbConnection