Convierta HttpPostedFileBase en byte

En mi aplicación MVC, estoy usando el siguiente código para subir un archivo.

MODELO

public HttpPostedFileBase File { get; set; } 

VER

 @Html.TextBoxFor(m => m.File, new { type = "file" }) 

Todo funciona bien … Pero estoy tratando de convertir el campo de resultados en byte []. ¿Cómo puedo hacer esto?

CONTROLADOR

  public ActionResult ManagePhotos(ManagePhotos model) { if (ModelState.IsValid) { byte[] image = model.File; //Its not working .How can convert this to byte array } } 

Como dice Darin, puedes leer en el flujo de entrada, pero evitaría confiar en que todos los datos estén disponibles de una sola vez. Si usa .NET 4, esto es simple:

 MemoryStream target = new MemoryStream(); model.File.InputStream.CopyTo(target); byte[] data = target.ToArray(); 

Es bastante fácil escribir el equivalente de CopyTo en .NET 3.5 si lo desea. La parte importante es que lea desde HttpPostedFileBase.InputStream .

Para fines eficientes, puede verificar si la transmisión devuelta ya es un MemoryStream :

 byte[] data; using (Stream inputStream = model.File.InputStream) { MemoryStream memoryStream = inputStream as MemoryStream; if (memoryStream == null) { memoryStream = new MemoryStream(); inputStream.CopyTo(memoryStream); } data = memoryStream.ToArray(); } 

Puedes leerlo desde la secuencia de entrada:

 public ActionResult ManagePhotos(ManagePhotos model) { if (ModelState.IsValid) { byte[] image = new byte[model.File.ContentLength]; model.File.InputStream.Read(image, 0, image.Length); // TODO: Do something with the byte array here } ... } 

Y si tiene la intención de guardar directamente el archivo en el disco, puede usar el método model.File.SaveAs . Es posible que la siguiente publicación de blog sea útil.