Télécharger des fichiers avec ASP.Net MVC – obtenir un nom mais pas de stream de fichiers, que fais-je mal?

J’ai ce formulaire à mon avis:

 <!-- was: 
-->

Et ce code dans mon contrôleur:

 public ActionResult SaveFile( FormCollection forms ) { bool errors = false; //this field is never empty, it contains the selected filename if ( ssortingng.IsNullOrEmpty( forms["FileBlob"] ) ) { errors = true; ModelState.AddModelError( "FileBlob", "Please upload a file" ); } else { ssortingng sFileName = forms["FileBlob"]; var file = Request.Files["FileBlob"]; //'file' is always null, and Request.Files.Count is always 0 ??? if ( file != null ) { byte[] buf = new byte[file.ContentLength]; file.InputStream.Read( buf, 0, file.ContentLength ); //do stuff with the bytes } else { errors = true; ModelState.AddModelError( "FileBlob", "Please upload a file" ); } } if ( errors ) { return ShowTheFormAgainResult(); } else { return View(); } } 

Sur la base de chaque échantillon de code que j’ai pu trouver, cela semble être le moyen de le faire. J’ai essayé avec des fichiers petits et grands, sans différence de résultat. Le champ de formulaire contient toujours le nom de fichier correspondant à ce que j’ai choisi et la collection Request.Files est toujours vide.

Je ne pense pas que ce soit pertinent, mais j’utilise le serveur Web de développement VS. AFAIK prend en charge les téléchargements de fichiers identiques à IIS.

Il se fait tard et il y a une chance que je manque quelque chose d’évident. Je serais reconnaissant pour tout conseil.

Je ne sais pas quelle est la politique sur l’affichage des blasphèmes, mais voici le problème:

 enctype="mulitipart/form-data" 

L’extra-in a arrêté le téléchargement du fichier. J’ai dû exécuter Fiddler pour voir qu’il n’envoyait jamais le fichier.

Il devrait lire:

 enctype="multipart/form-data" 

Pour les personnes qui pourraient tomber sur ce post dans le futur, voici un excellent article de Scott Hanselman sur le sujet: Une étude de cas de retour aux sources: implémenter le téléchargement de fichiers HTTP avec ASP.NET MVC, y compris les tests et les simulations

 var file = Request.Files[sFileName]; 

devrait être…

 var file = Request.Files["FileBlob"]; 

cela dit, Request.Files.Count devrait être 1 … hmmm

Bon que vous ayez trouvé votre erreur.

En guise de remarque, vous voudrez essayer le code de traitement des fichiers afin que vous sachiez quand les permissions des fichiers, etc., ne sont pas correctement configurées.