2009-10-22 19 views
7

Sto tentando di caricare file in MVC. La maggior parte della soluzione che ho visto su SO è l'uso di webform. Non voglio usarlo e preferisco personalmente usare i flussi. Come implementate il caricamento di file RESTful su MVC? Grazie!Caricamento file in MVC

risposta

13

Modifica: E proprio quando pensi di aver capito tutto capisci che c'è un modo migliore. Scopri http://haacked.com/archive/2010/07/16/uploading-files-with-aspnetmvc.aspx

originale: Non sono sicuro che ho capito la tua domanda al 100%, ma suppongo che si desidera caricare un file a un URL che sembra qualcosa di simile http: // {nome server}/{controller}/Carica? Questo sarebbe implementato esattamente come un normale caricamento di file usando i moduli web.

Quindi il controller ha un nome di upload azione ed è simile a questo:

//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" }); 
    } 
} 

In questo caso sto tornando JSON per indicare il successo, ma è possibile modificare questo per XML (o qualsiasi cosa per quella materia) se necessario.

+0

E, ovviamente, assicurarsi SEMPRE che non si stia semplicemente accettando la posta indesiderata di un utente. Il controllo minimo dovrebbe essere il tipo di contenuto, l'estensione ed eseguirlo tramite uno scanner di virus prima di considerarlo affidabile. :) – ZombieSheep

+0

Vary true, ZombieSheep, devi controllare TUTTO ciò che un client invia sul lato server, anche se hai convalidato sul client, ma tutta la roba "produzione pronta" interferisce con il punto che stai cercando di dimostrare. – Geoff

+0

Grazie! Ma è così che uso al momento. Non voglio salvare alcun file sul server perché inquinerà il server. – 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();} 
Problemi correlati