2009-09-04 5 views
1

Je dois télécharger une image dans le cadre d'une action de création dans une application MVC.Téléchargement d'une image à l'aide d'ASP.NET MVC

L'image sera stockée dans le serveur de fichiers et la base de données contiendra un chemin à cet effet.

Je prévois d'utiliser la balise follwing pour obtenir le fichier:

> <input type="file" id="MyImage" name="MyImageName" /> 

Comment accéder et enregistrer ce dans l'action du contrôleur?

Répondre

1

Je mets cela dans une classe BaseController, à partir de laquelle tous mes contrôleurs héritent:

// this just prefixes datetime as yyyyMMddhhmmss to the filename, to 
    // be use that no name collision will occur. 
    protected static String PrefixFName(String fname) 
    { 
     if (String.IsNullOrEmpty(fname)) 
     { 
      return null; 
     } 
     else 
     { 
      return String.Format("{0}{1}", 
           DateTime.Now.ToString("yyyyMMddhhmmss"), 
           fname); 
     } 
    } 

    protected String SaveFile(HttpPostedFileBase file, String path) 
    { 
     if (file != null && file.ContentLength > 0) 
     { 
      if (path == null) 
      { 
       throw new ArgumentNullException("path cannot be null"); 
      } 
      String relpath = String.Format("{0}/{1}", path, PrefixFName(file.FileName)); 
      try 
      { 
       file.SaveAs(Server.MapPath(relpath)); 
       return relpath; 
      } 
      catch (HttpException e) 
      { 
       throw new ApplicationException("Cannot save uploaded file", e); 
      } 
     } 
     return null; 
    } 

Ensuite, dans le contrôleur que je fais:

savedPath = SaveFile(Request.Files["logo"], somepath); 
+0

Request.Files est vide, mais mon champ de chaîne pour le nom de fichier est en cours de définition. Ma vue HTML est: littlechris

+1

Etrange ... qu'est-ce que c'est? la valeur retournée? En outre, pourquoi définissez-vous une valeur attr pour l'étiquette d'entrée? Notez que vous ne pouvez pas le réutiliser si vous réexécutez le formulaire (par exemple, si le formulaire n'est pas valide et que l'utilisateur doit corriger quelque chose). – giorgian

+0

L'a triée. Onglet Nom manquant, seul l'identifiant était affiché. :) – littlechris

2

Dans votre action du contrôleur, il devrait sortir à

Action(HttpPostedFileBase MyImageName) { 
    etc; 
} 
0

Vous pouvez également obtenir le fichier par Request.Files si nécessaire.

Questions connexes