2010-10-22 82 views
0

在asp.net mvc c#控制器中检查文件类型和大小的最佳方法是什么?asp.net mvc c#检查文件类型和文件大小

+1

您必须指定,是否这个问题有什么用ASP.NET MVC(如果是的话,是什么?)或者是它只是一个.NET的问题? – Onkelborg 2010-10-22 12:36:53

+0

@Onkelborg - 我最好的猜测是他说的是上传文件 – 2010-10-22 12:38:44

+0

也许,谁知道? =) – Onkelborg 2010-10-22 12:40:36

回答

0

为了计算以下代码文件的大小将在控制器用来:

var fileSize = objFile.size; //size in kb 
fileSize = fileSize/1048576; //size in mb 

和用于检查文件类型可以在Javascript

var _validFileExtensions = [".jpg", ".jpeg", ".bmp", ".gif", ".png"];  
function Validate(oForm) { 
    var arrInputs = oForm.getElementsByTagName("input"); 
    for (var i = 0; i < arrInputs.length; i++) { 
     var oInput = arrInputs[i]; 
     if (oInput.type == "file") { 
      var sFileName = oInput.value; 
      if (sFileName.length > 0) { 
       var blnValid = false; 
       for (var j = 0; j < _validFileExtensions.length; j++) { 
        var sCurExtension = _validFileExtensions[j]; 
        if (sFileName.substr(sFileName.length - sCurExtension.length, sCurExtension.length).toLowerCase() == sCurExtension.toLowerCase()) { 
         blnValid = true; 
         break; 
        } 
       } 

       if (!blnValid) { 
        alert("Sorry, " + sFileName + " is invalid, allowed extensions are: " + _validFileExtensions.join(", ")); 
        return false; 
       } 
      } 
     } 
    } 

    return true; 
} 
0

你可以得到一个文件的扩展:

string extension = Path.GetExtension(upload.FileName); 

这将包括领先的.

请注意,你不应该认为扩展是正确的。

决定类型从byte[]是不是很简单。您必须假设使用MagicStrings,使用unmanaged code,或者进行调查性工作,如迭代地以各种类型消费,直到它不会失败等等。如果这是一个内部应用程序,则可以减轻错误类型的文件上传的后果并且恶意使用的威胁非常低,依靠扩展可能足够合理,而与其余部分的开销相比,

我不知道可能是你可以使用System.Web.MimeMapping类是BCL在.NET框架4.5的一部分使用MIME

string mimeType = MimeMapping.GetMimeMapping(fileName); 
0

可以使用Myrmec识别文件类型,这个库使用文件字节头。这个库在nuget“Myrmec”上可用,这是repo,myrmec也支持MIME类型,你可以试试它。该代码将是这样的:

// create a sniffer instance. 
Sniffer sniffer = new Sniffer(); 

// populate with mata data. 
sniffer.Populate(FileTypes.CommonFileTypes); 

// get file head byte, may be 20 bytes enough. 
byte[] fileHead = ReadFileHead(); 

// start match. 
List<string> results = sniffer.Match(fileHead); 

,并得到MIME类型:

List<string> result = sniffer.Match(head); 
string mimeType = MimeTypes.GetMimeType(result.First());