J’ai créé un contrôleur qui enregistre les fichiers.
Le code ci-dessous fait partie de ce contrôleur:
if ( Request.Files.Count != 0 ) { HttpFileCollectionBase files = Request.Files; foreach ( HttpPostedFileBase file in files ) { if ( file.ContentLength > 0 ) { if ( !file.ContentType.Equals( "image/vnd.dwg" ) ) { return RedirectToAction( "List" ); } } } }
dans ASPX la page est simple:
...// many inputs type file
Le problème est foreach
car il renvoie une erreur du type (je sais, car je cours en mode débogage et place un point d’arrêt à l’instruction foreach):
Unable to cast object of type 'System.Ssortingng' to type 'System.Web.HttpPostedFileBase'.
Quelle est mon erreur?
Essayez comme ça:
[HttpPost] public ActionResult Upload(IEnumerable files) { if (files != null && files.Count() > 0) { foreach (var uploadedFile in files) { if (uploadedFile.ContentType != "image/vnd.dwg") { return RedirectToAction("List"); } var appData = Server.MapPath("~/app_data"); var filename = Path.Combine(appData, Path.GetFileName(uploadedFile.FileName)); uploadedFile.SaveAs(filename); } } return RedirectToAction("Success"); }
et modifiez le balisage pour que les entrées de fichier soient des fichiers nommés:
...// many inputs type file
for (int i = 0; i < Request.Files.Count; i++) { var file = Request.Files[i]; // this file's Type is HttpPostedFileBase which is in memory }
HttpRequestBase.Files
requirejs un index, utilisez donc for
au lieu de foreach
.
Jetez un coup d’œil à ce billet de Phil Haack qui montre comment traiter plusieurs téléchargements de fichiers à l’aide de MVC. L’object que vous essayez d’utiliser est destiné aux formulaires Web ASP.NET.