在我的MVC应用程序中,我使用以下代码上传文件。
MODEL
public HttpPostedFileBase File { get; set; }
查看
@Html.TextBoxFor(m => m.File, new { type = "file" })
一切正常......但是我试图将结果字段转换为byte []。我该怎么办呢
CONTROLLER
public ActionResult ManagePhotos(ManagePhotos model)
{
if (ModelState.IsValid)
{
byte[] image = model.File; //Its not working .How can convert this to byte array
}
}
答案 0 :(得分:238)
正如Darin所说,你可以从输入流中读取 - 但我要避免依赖所有可用的数据。如果您使用的是.NET 4,这很简单:
MemoryStream target = new MemoryStream();
model.File.InputStream.CopyTo(target);
byte[] data = target.ToArray();
如果需要,可以在.NET 3.5中编写等效的CopyTo
。重要的是你从HttpPostedFileBase.InputStream
阅读。
出于有效目的,您可以检查返回的流是否已经是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();
}
答案 1 :(得分:25)
您可以从输入流中读取它:
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
方法。您可能会发现following blog post很有用。