2012-01-09 19 views
6

¿Puedo utilizar:ASP.NET MVC 3: ¿Admite la carga de múltiples archivos HTML5?

<input type="file" name="files" id="files" multiple="multiple" /> 

y enlazarlo a:

[HttpPost] 
public ActionResult Upload(IEnumerable<HttpPostedFileBase> files) 
{ 
    ... 
} 

Estoy escribiendo una aplicación web para navegadores modernos y no tienen que preocuparse de IE por lo que me gustaría evite usar Flash. En este momento files siempre es nulo cuando publico el formulario. ¿Hay alguna forma de hacer que esto funcione en MVC 3?

Gracias!

+1

posible duplicado de [Multi-File Cargar con HTML 5] (http://stackoverflow.com/questions/8713802/multi-file-upload-with-html-5) –

+1

Probablemente necesite crear un archivador de modelo personalizado. – Craig

+0

O haga la firma 'public ActionResult Upload (archivos HttpPostedFileBase [])' –

Respuesta

13

¿Tiene su codificación establecida correctamente en su formulario?

Te creo todavía necesitan:

new { enctype = "multipart/form-data" } 

En la declaración de forma de asegurar que el navegador puede publicar archivos.

Por ejemplo:

@using (Html.BeginForm("action", "controller", FormMethod.Post, new { enctype = "multipart/form-data" })) 
+0

Sí, tengo la codificación establecida correctamente. Gracias –

+0

OK, habló demasiado pronto. Volví a verificarlo y tenía un tipo-o allí que impedía que el archivo se publicara. –

1

¿No sería un uso las Request.Files para compatibilidad con versiones anteriores de la siguiente manera:

public ActionResult UploadFiles() 
{ 
    string UpoadedFilesFolder = "YourServerFolder"; 
    string fileName =""; 
    byte[] fileData=null; 
    foreach (HttpPostedFileBase uf in Request.Files) 
    { 
    HttpPostedFileBase UpoadedFile = uf; 
    if (uf.ContentLength > 0) 
    { 
     fileName = Path.GetFileName(UpoadedFile.FileName); 
     using (BinaryReader br = new BinaryReader(UpoadedFile.InputStream)) 
     { 
     fileData = br.ReadBytes((int)UpoadedFile.InputStream.Length); 
     } 
     using (FileStream fs = new FileStream(Path.Combine(System.Web.Hosting.HostingEnvironment.MapPath(UpoadedFilesFolder), fi.FileName), FileMode.Create)) 
     { 
     fs.Write(fileData, 0, fileData.Length); 
     } 
    } 
    } 
    return Content("OK"); 
} 
0

Mi Índice de Vista:

@using (Html.BeginForm("Upload","home", FormMethod.Post,new { enctype = "multipart/form-data" })) 
{ 
    <input type="file" name="files" value=" " multiple="multiple" /> 
    <input type="submit" name="btUpload" value="Upload" /> 
} 

En controlador

public ActionResult Upload(HttpPostedFileBase[] files) 
     { 
      TempData["Message"] = files.Count(); 
      return RedirectToAction("Index"); 
     } 

Y los archivos contienen archivos cargados - ¡funciona bien para mí!

0

Esto no funcionará:

foreach (HttpPostedFileBase uf in Request.Files) 
{ 
    HttpPostedFileBase UpoadedFile = uf; 
} 

deberíamos hacer así:

for (int i=0; i<Request.Files.Count; i++) 
{ 
    HttpPostedFileBase UpoadedFile = Request.Files[i]; 
} 
Cuestiones relacionadas