2013-10-12 134 views
6

我不斷收到「只允許圖片」,我試圖「file.PostedFile.FileName」也不能正常工作!獲得發佈文件擴展名asp.net

這段代碼是寫在一個單獨的類..

public static String UploadFile(FileUpload file, String type, out String filename) 
{ 
    String ext = System.IO.Path.GetExtension(file.FileName); 
    filename = ""; 
    if (file.PostedFile.ContentLength > 2000000) 
    { 
     return "File is larger than 2 MB"; 
    } 
    else if (type != "File") 
    { 
     if (ext.ToLower() != ".jpg" || ext.ToLower() != ".png" || ext.ToLower() != ".gif" || ext.ToLower() != ".jpeg") 
     { 
      return "Only images are allowed"; 
     } 
     else 
     { 
      filename = System.IO.Path.GetRandomFileName() + "_" + file.PostedFile.FileName; 
      String root = HttpContext.Current.Server.MapPath("~/Images/"); 
      file.SaveAs(root + type + "/" + filename); 
      return "Success"; 
     } 
    } 
    else 
    { 
     filename = System.IO.Path.GetRandomFileName() + "_" + file.PostedFile.FileName; 
     String root = HttpContext.Current.Server.MapPath("~/Files/"); 
     file.SaveAs(root + filename); 
     return "Success"; 
    } 
} 
+0

你傳遞給這個方法的是什麼類型的fikle? –

+0

你可不可以使用File.Extention() –

回答

6

你的條件是錯誤的,它應該像下面:

if (ext.ToLower() != ".jpg" && ext.ToLower() != ".png" && ext.ToLower() != ".gif" && ext.ToLower() != ".jpeg") 
{ 
return "Only images are allowed"; 
} 
else 
{ 
///statement 
} 

OR

if (ext.ToLower() == ".jpg" || ext.ToLower() == ".png" || ext.ToLower() == ".gif" || ext.ToLower() == ".jpeg") 
    { 

    ///statement 
    } 
    else 
    { 
return "Only images are allowed"; 
    } 
+1

@Anas ..從編譯器的角度來看,第二個是最好的,你應該使用這個。 – NMathur

3

您的檢查有效的擴展條件是邏輯上不正確(始終計算爲true)。它應該是這樣的(||被替換&&):

if (ext.ToLower() != ".jpg" && ext.ToLower() != ".png" && ext.ToLower() != ".gif" && ext.ToLower() != ".jpeg") 
{ 
    return "Only images are allowed"; 
} 
4

@ volpav的答案解決你的問題,但那大if不是處理這個問題的最簡單的方法。

更優雅的是定義一個可接受的擴展名列表,並檢查ext是否在列表中。這樣做的好處是,如果您以後必須更改有效類型,則更容易維護,並且如果需要,可以將擴展用戶定義爲可定義的。

在下面的例子我定義爲我的類,它包含與所有異常的陣列的常數(以及只讀變量),並使用Contains()擴展方法來測試,以查看是否存在內它extUploadFile

驗證時
public static readonly string[] VALID_EXTENSIONS = 
    new string[4] { ".png", ".jpg", ".gif", ".jpeg" }; 

// in UploadFile ... 
    if (!VALID_EXTENSIONS.Contains(ext.ToLower())) { 
     return "Only images are allowed"; 
    } 

通過在上面的代碼中將其設置爲靜態,我可以在UI中使用此列表來指示什麼是例外擴展,而不是讓用戶猜測什麼是有效的圖像類型(畢竟,其他圖像類型比你所包含的類型)。