2011-12-05 133 views
0

我想限制上傳到我的網站的文件類型。我在下面使用這個函數。如果陳述爲.jpg || .gif || .jpeg || .png,我會寫嗎? 我不希望人們上傳exe的。做這個的最好方式是什麼?限制要上傳的文件類型

if (FileUpload1.HasFile) 
    try 
    { 
     var FileExtension = Path.GetExtension(FileUpload1.PostedFile.FileName); 
     var Myguid = Guid.NewGuid().ToString("N"); 

     //Check to make sure its an allowable file to be uploaded???????????   

     var newName = Guid.NewGuid() + FileExtension; 
     //Map path to folder 
     string realpath = Server.MapPath("Pictures\\") + newName; 

     //FileUpload1.SaveAs("C:\\Users\\josh\\Desktop\\JaysVersion\\PicRatingSite\\PicRatingSite\\Pictures" + FileUpload1.FileName); 
     FileUpload1.SaveAs(realpath); 

     Label1.Text = "File name: " + 
      FileUpload1.PostedFile.FileName + "<br>" + 

      FileUpload1.PostedFile.ContentLength + " kb<br>" + 
      "Content type: " + 
      FileUpload1.PostedFile.ContentType; 


     InsertMembers insert = new InsertMembers(); 
     int age = Int32.Parse(txtAge.Text); 
     insert.InsertNewMember(txtEmail.Text, Myguid, txtName.Text, txtCity.Text, txtState.Text, txtDescription.Text, age, gender); 


     //Get Member Id to Insert into Pictures table 
     GetMemberInfo GetID = new GetMemberInfo(); 
     int UMemberId = GetID.GetMemberId(Myguid); 
     Displayme.Text = newName.ToString(); 

     //Now that i have member Id Lets insert new picture into picture table 
     Picture InsertnewPictures = new Picture(); 
     int insertpics = InsertnewPictures.InserNewPicture(UMemberId, newName, 0); 

    } 
    catch (Exception ex) 
    { 
     //Handle the error 
     throw ex; 
    } 
else 
{ 
    Label1.Text = "You have not specified a file."; 
} 
+0

我不認爲有任何其他方式比看文件的集合看到已經上傳的文件類型來上傳。這很容易做到,但不幸的是這意味着您只能檢查這個AFTER文件是否已經發送。在較新的瀏覽器中,您可以指定允許在客戶端上顯示FILE控件的文件擴展名。 –

回答

1

不要相信用戶提供的文件名。這是微不足道的,在上傳之前,有人可以輕鬆地「重命名nastyvirus.exe cutekittens.jpg」。您必須使用服務器端MIME類型檢測來確保您確實獲得了圖像。遠程瀏覽器提供的MIME類型也一樣。它也可以被輕易僞造,並使「nastyvirus.exe」顯示爲「text/plain」。

+0

你有一個簡單的例子來說明如何做到這一點?對Csharp很新穎。 – CsharpBeginner

+0

抱歉,從未與C#親自合作過。這只是一般性的建議。永遠不要相信遠程用戶發送的任何內容,特別是在表單數據和文件上傳時。 –

+0

幾年前,我寫了一個[小內容檢測庫](http://www.codeproject.com/KB/cs/ContentDetectorLib.aspx),這可能有助於作爲首發。 –

0

可以過濾的文件類型使用switch語句

var FileExtension = Path.GetExtension(FileUpload1.PostedFile.FileName); 

switch(FileExtension.ToLower()) 
{ 
    case".jpg": 
    case".png": 
    case".gif": 
    case".jpeg": 
     break; 
    default: 
     Response.Write("this file type is not allowed"); 
     return; 
} 
相關問題