将HttpPostedFileBase转换为byte []

时间:2011-10-21 16:00:27

标签: arrays image asp.net-mvc-3

在我的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
        }
     }

2 个答案:

答案 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很有用。