将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
方法。 您可能会发现以下博客文章有用。