2013-10-12 25 views
6

"Sadece görüntülere izin verilir" almaya devam ediyorum ve "file.PostedFile.FileName" da denemedim! Geçerli uzatılması için kontrol etmek içinyayınlandı olsun dosya uzantısı asp.net

bu kod ayrı sınıfta yazılır ..

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

Bu yönteme nasıl bir fikle geçiyorsunuz? –

+0

File.Extention() –

cevap

6

Durumunuz yanlıştır, aşağıdaki gibi olmalıdır:

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

VEYA

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

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

@Anas .. 'ı derleyici bakış açısıyla kullanamazsınız, ikincisi en iyisi, bunu kullanmalısınız. – NMathur

3

Durumunuz (her zaman true olarak değerlendirilirse) mantıksal olarak yanlıştır. O (||&& değiştirilir) böyle olmalı:

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

volpav cevabı @ olacak Sorununuzu düzeltin, ancak bu büyük if sorunu işlemenin en temiz yolu değildir.

Daha da zarif, kabul edilen uzantıların bir listesini tanımlamak ve listede ext olup olmadığını kontrol etmek olacaktır. Bunun avantajları, daha sonra geçerli türleri değiştirmek zorunda kalmanız ve eğer istenirse uzantıyı kullanıcı tanımlı hale getirebilirseniz, bakımı daha kolay olacaktır. Örnekte

UploadFile

yılında doğrulanırken tüm istisnalar dışında bir dizi içerir Dersim için bir sabiti (iyi salt okunur değişken) tanımlayan ve ext içindeki mevcut olmadığını test etmek Contains() uzatma yöntemi kullanmak am altında

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"; 
    } 

Yukarıdaki kodda durağan hale getirerek, bu listeyi, kullanıcı tarafından geçerli bir resim türü olduğunu tahmin etmek yerine, istisnai uzantıların ne olduğunu göstermek için kullanıcı arayüzünde kullanabilirim (Sonuçta, başka bir resim vardır). dahil ettiğinizlerden daha büyükler).