2012-01-09 13 views
6

Posso usare:ASP.NET MVC 3: supporto per il caricamento di più file HTML5?

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

e associarlo a:

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

Sto scrivendo una web app per i browser moderni e non devono preoccuparsi di IE quindi mi piacerebbe evitare l'uso di Flash. In questo momento files è sempre nullo quando pubblico il modulo. C'è un modo per farlo funzionare in MVC 3?

Grazie!

+1

possibile duplicato del [Multi-File Upload con HTML 5] (http://stackoverflow.com/questions/8713802/multi-file-upload-con-html-5) –

+1

Probabilmente sarà necessario creare un raccoglitore modello personalizzato. – Craig

+0

Oppure effettuare la firma 'pubblica ActionResult Upload (file HttpPostedFileBase [])' –

risposta

13

Avete la vostra codifica impostata correttamente nel modulo?

Ti credo ancora bisogno:

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

Nella dichiarazione modulo per garantire il browser può inviare i file.

Ad esempio:

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

Sì, ho impostato correttamente la codifica. Grazie –

+0

OK, ha parlato troppo presto. Sono tornato per ricontrollare e ho avuto un tipo-o che impediva la pubblicazione del file! –

1

Non sarebbe un uso le Request.Files per la compatibilità a ritroso come segue:

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

mio Indice 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" /> 
} 

controller

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

E i file contengono file caricati - funziona bene per me!

0

Questo non funziona:

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

dovrebbero fare in questo modo:

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