2013-10-12 17 views
6

Continuo a ricevere "Solo immagini sono consentite" e ho provato "file.PostedFile.FileName" anche non funzionante !!get estensione file asp.net

questo codice è scritto in una classe separata ..

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

Che tipo di fikle stai passando a questo metodo? –

+0

Non puoi usare File.Extention() –

risposta

6

la sua condizione è sbagliato, dovrebbe essere come segue:

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

O

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

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

@Anas .. dal punto di vista del compilatore, il secondo è il migliore, dovresti usare questo. – NMathur

3

tua condizione per la verifica per l'estensione valida è logicamente corretta (restituisce sempre true). Dovrebbe essere simile a questo (|| sono sostituiti con &&):

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

@ risposta di volpav sarà correggi il tuo problema, ma il grande numero if non è il modo più semplice per gestire il problema.

più elegante sarebbe quello di definire un elenco di estensioni accettati e controllare per vedere se ext è nella lista. I vantaggi a tale riguardo sono che è più semplice da mantenere se si devono modificare i tipi validi in un secondo momento e se è possibile rendere le estensioni definibili dall'utente.

Nell'esempio sotto sto definente una costante (variabile ben sola lettura) per la mia classe che contiene una matrice con tutte le eccezioni, e utilizzare il metodo Contains() estensione a verificare se ext esiste all'interno di esso durante la convalida in UploadFile

Rendendo statico nel codice precedente, potrei usare questo elenco nell'interfaccia utente per indicare quali sono le estensioni escluse, invece di indovinare all'utente che cosa è un tipo di immagine valido (Ci sono, dopo tutto, altre immagini tipi di quelli che hai incluso).