如果有人将任何文件(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文件。它的形象。
答案 0 :(得分:3)
为此,您需要尝试使用Excel库或Excel COM对象本身打开它。不幸的是,Microsoft不支持服务器环境中的Office COM对象自动化。
您可以只读取文件的第一部分并检查二进制签名,但支持所有可能的XLS版本需要做很多工作。和.XSLX文件只是包含多个部分文档的ZIP文件。
希望有所帮助。
答案 1 :(得分:3)
您可以随时使用Excel OleDB Database driver并尝试打开OleDbConnection。