Convert HttpPostedFileBase to byte[]
As Darin says, you can read from the input stream - but I'd avoid relying on all the data being available in a single go. If you're using .NET 4 this is simple:
MemoryStream target = new MemoryStream();model.File.InputStream.CopyTo(target);byte[] data = target.ToArray();
It's easy enough to write the equivalent of CopyTo
in .NET 3.5 if you want. The important part is that you read from HttpPostedFileBase.InputStream
.
For efficient purposes you could check whether the stream returned is already a 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();}
You can read it from the input stream:
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 } ...}
And if you intend to directly save the file to the disk you could use the model.File.SaveAs
method. You might find the following blog post useful.
byte[] file = new byte[excelFile.ContentLength];excelFile.InputStream.Read(file, 0, file.Length);//Create memory stream object from your bytesMemoryStream ms = new MemoryStream(file);// Set WorkbookPart , Sheetusing (var myDoc = DocumentFormat.OpenXml.Packaging.SpreadsheetDocument.Open(ms, true))