2009-06-09 121 views

回答

4

你也可以做一個JavaScript替代過濾它是服務器端(你可能也想這樣做),但是這樣可以節省客戶端花費等待上傳完成的時間,以便發現它是錯誤的類型。

http://javascript.internet.com/forms/upload-filter.html

所以基本上你只要運行一個JavaScript函數上提交解析關閉上傳文件的擴展名,如果它不正確類型的給他們一個警告。你也可以使用document.forms [0] .submit();}。而不是通過形式參考(因爲ASP.NET真的只使用一種形式(除非你做一些時髦))

1

檢查上傳的文件服務器端的文件名:

FileUpload1.PostedFile.FileName 

除非你想使用Java或在客戶端上類似的東西,有真的沒有什麼可以做的過濾上傳的文件之前,他們會發送到服務器。

2
 string fileName = fuFiles.FileName; 

     if(fileName.Contains(".dot")) 
     { 
      fuFiles.SaveAs(Server.MapPath("~/Files/" + fileName)); 
     } 
2

如果您的意思是使用標準瀏覽器的文件選擇器過濾文件擴展名客戶端/端,是不可能的。 要做到這一點,你必須使用混合類型的上傳,如SWFUpload,基於Flash上​​傳系統(這是一個非常好的技術:它允許你發佈超過一個文件)。

你可以在標準模式下唯一要做的是過濾已經發布文件,我建議使用System.IO.Path命名空間實用程序:

if (Path.GetExtension(upFile.FileName).ToUpper().CompareTo(".DOT") == 0) 
{ 
    /* do what you want with file here */ 
} 
1

在這裏我有一個小的方法,我用來過濾哪些類型的文件可以上傳名爲fuLogo的文件上傳控件。

if (fuLogo.HasFile) 
     { 
      int counter = 0; 
      string[] fileBreak = fuLogo.FileName.Split(new char[] { '.' }); 
      logo = Server.MapPath("../Images/Logos/" + fileBreak[0] + counter.ToString()+ "." + fileBreak[1]); 
      if (fileBreak[1].ToUpper() == "GIF" || fileBreak[1].ToUpper() == "PNG") 
      { 
       while (System.IO.File.Exists(logo)) 
       { 
        counter++; 
        logo = Server.MapPath("../Images/Logos/" + fileBreak[0] + counter.ToString() + "." + fileBreak[1]); 
       } 
      } 
      else 
      { 
       cvValidation.ErrorMessage = "This site does not support any other image format than .Png or .Gif . Please save your image in one of these file formats then try again."; 
       cvValidation.IsValid = false; 
      } 
      fuLogo.SaveAs(logo); 
     } 

基本上,我首先遍歷目錄來查看文件是否已經存在。如果文件存在,(例如picture0.gif),它會增加計數器(至picture1.gif)。它可以防止不同的用戶在他們的圖片具有相同的名字時會覆蓋彼此的圖片。

+1

如果您的文件名是myFile.1.png,則會失敗,請改用Path.GetExtension(theFileName) – 2012-03-16 15:13:48