2009-10-22 9 views
7

J'essaie de télécharger des fichiers dans MVC. La plupart des solutions que j'ai vues sur SO est l'utilisation de webform. Je ne veux pas utiliser cela et préfère personnellement utiliser des flux. Comment implémentez-vous le téléchargement de fichiers RESTful sur MVC? Merci!Télécharger le fichier dans MVC

Répondre

13

Editer: Et juste quand vous pensez avoir tout compris, vous vous rendez compte qu'il y a un meilleur moyen. Consultez http://haacked.com/archive/2010/07/16/uploading-files-with-aspnetmvc.aspx

Original: Je ne suis pas sûr que je comprends votre question à 100%, mais je suppose que vous souhaitez télécharger un fichier à une URL qui ressemble à quelque chose comme http: // {nom du serveur}/{Contrôleur}/Télécharger? Cela serait implémenté exactement comme un téléchargement de fichier normal en utilisant des formulaires Web.

Ainsi, votre contrôleur a une action téléchargement nommé et ressemble à ceci:

//For MVC ver 2 use: 
[HttpPost] 
//For MVC ver 1 use: 
//[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Upload() 
{ 
    try 
    { 
     foreach (HttpPostedFile file in Request.Files) 
     { 
      //Save to a file 
      file.SaveAs(Path.Combine("C:\\File_Store\\", Path.GetFileName(file.FileName))); 

      // * OR * 
      //Use file.InputStream to access the uploaded file as a stream 
      byte[] buffer = new byte[1024]; 
      int read = file.InputStream.Read(buffer, 0, buffer.Length); 
      while (read > 0) 
      { 
       //do stuff with the buffer 
       read = file.InputStream.Read(buffer, 0, buffer.Length); 
      } 
     } 
     return Json(new { Result = "Complete" }); 
    } 
    catch (Exception) 
    { 
     return Json(new { Result = "Error" }); 
    } 
} 

Dans ce cas, je suis de retour JSON pour indiquer le succès, mais vous pouvez modifier ce xml (ou quoi que ce soit d'ailleurs) si besoin.

+0

Et, bien sûr, assurez-vous TOUJOURS que vous n'acceptez pas n'importe quel vieux morceau d'un utilisateur. Vérification minimale serait le type de contenu, l'extension et l'exécuter via un scanner de virus avant de lui faire confiance. :) – ZombieSheep

+0

Vary true, ZombieSheep, vous devez vérifier TOUT ce qu'un client envoie côté serveur, même si vous avez validé sur le client, mais tous les trucs "prêts à la production" entravent le point où vous essayez de démontrer. – Geoff

+0

Merci! Mais c'est la façon dont j'utilise actuellement. Je ne veux enregistrer aucun fichier sur le serveur car cela polluerait le serveur. – Roy

0
public ActionResult register(FormCollection collection, HttpPostedFileBase FileUpload1){ 
RegistrationIMG regimg = new RegistrationIMG(); 
string ext = Path.GetExtension(FileUpload1.FileName); 
string path = Server.MapPath("~/image/"); 
FileUpload1.SaveAs(path + reg.email + ext); 
regimg.Image = @Url.Content("~/image/" + reg.email + ext); 
db.SaveChanges();} 
Questions connexes