将 HttpPostedFileBase 转换为 byte []

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

模特

 public HttpPostedFileBase File { get; set; }

视图

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

一切正常。.但是我正在尝试将结果字段转换为 byte []。我怎么能这么做

控制员

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

您可以从输入流中读取:

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方法。您可能会发现 跟随博客文章很有用。

正如 Darin 所说,您可以从输入流中读取数据——但是我会避免依赖于所有可用的数据。如果你吸毒的话。NET 4这很简单:

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

写入相当于 CopyTo的代码很容易。NET 3.5.重要的部分是你从 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();
}
byte[] file = new byte[excelFile.ContentLength];
excelFile.InputStream.Read(file, 0, file.Length);


//Create memory stream object from your bytes
MemoryStream ms = new MemoryStream(file);


// Set WorkbookPart , Sheet
using (var myDoc = DocumentFormat.OpenXml.Packaging.SpreadsheetDocument.Open(ms, true))