2009-10-22 37 views
7

Estoy tratando de cargar archivos dentro de MVC. La mayoría de la solución que vi en SO es usar webform. No quiero usar eso y personalmente prefiero usar transmisiones. ¿Cómo se implementa la carga de archivos RESTful en MVC? ¡Gracias!Carga de archivos en MVC

Respuesta

13

Edit: Y justo cuando crees que lo tienes todo resuelto, te das cuenta de que hay una mejor manera. Echa un vistazo a http://haacked.com/archive/2010/07/16/uploading-files-with-aspnetmvc.aspx

original: No estoy seguro de que entiendo su pregunta 100%, pero supongo que desea cargar un archivo a una dirección URL que se ve algo como http: // {nombre del servidor}/{Controlador}/¿Subir? Esto se implementaría exactamente como una carga de archivo normal utilizando formularios web.

Así que su controlador tiene una llamada de subida acción y es similar a esto:

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

En este caso voy a volver JSON para indicar el éxito, pero se puede cambiar esto a XML (o lo que fuera) si es necesario.

+0

Y, obviamente, SIEMPRE asegúrese de que no solo está aceptando cualquier basura vieja de un usuario. El control mínimo sería el tipo de contenido, la extensión y ejecutarlo a través de un escáner de virus antes de confiar en él. :) – ZombieSheep

+0

Varíe cierto, ZombieSheep, necesita comprobar TODO lo que envía un cliente por el servidor, incluso si lo ha validado en el cliente, pero todas las cosas "preparadas para producción" se interponen en el camino del punto que está intentando demostrar. – Geoff

+0

¡Gracias! Pero esa es la forma en que uso actualmente. No quiero guardar ningún archivo en el servidor porque contaminará el servidor. – 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();}