2010-10-22 91 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());