Nul*_*ter 116 arrays image asp.net-mvc-3
在我的MVC应用程序中,我使用以下代码上传文件.
模型
public HttpPostedFileBase File { get; set; }
Run Code Online (Sandbox Code Playgroud)
视图
@Html.TextBoxFor(m => m.File, new { type = "file" })
Run Code Online (Sandbox Code Playgroud)
一切工作正常..但我试图将结果fiel转换为byte [].我怎么能这样做
CONTROLLER
public ActionResult ManagePhotos(ManagePhotos model)
{
if (ModelState.IsValid)
{
byte[] image = model.File; //Its not working .How can convert this to byte array
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 245
正如Darin所说,你可以从输入流中读取 - 但我不会依赖于一次性可用的所有数据.如果您使用的是.NET 4,这很简单:
MemoryStream target = new MemoryStream();
model.File.InputStream.CopyTo(target);
byte[] data = target.ToArray();
Run Code Online (Sandbox Code Playgroud)
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();
}
Run Code Online (Sandbox Code Playgroud)
Dar*_*rov 26
您可以从输入流中读取它:
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
}
...
}
Run Code Online (Sandbox Code Playgroud)
如果您打算直接将文件保存到磁盘,则可以使用该model.File.SaveAs方法.您可能会发现以下博客文章很有用.