将HttpPostedFileBase转换为byte

在我的MVC应用程序中,我使用下面的代码来上传文件。

模型

public HttpPostedFileBase File { get; set; } 

视图

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

一切工作正常..但我想把结果转换为字节[]。我可以做到这一点

CONTROLLER

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

正如Darin所说,你可以从inputstream中读取数据,但是我会避免依靠所有可用的数据。 如果你使用.NET 4,这很简单:

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

在.NET 3.5中编写相当于CopyTo的代码很容易。 重要的部分是你从HttpPostedFileBase.InputStream读取。

为了有效的目的,你可以检查返回的stream是否已经是一个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(); } 

你可以从inputstream中读取它:

 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 } ... } 

如果您打算直接将文件保存到磁盘,则可以使用model.File.SaveAs方法。 您可能会发现以下博客文章有用。