Преобразование HttpPostedFileBase в байт []
В моем приложении MVC я использую следующий код для загрузки файла.
MODEL
public HttpPostedFileBase File { get; set; }
VIEW
@Html.TextBoxFor(m => m.File, new { type = "file" })
Все работает нормально.. Но я пытаюсь преобразовать результат fiel в байт []. Как я могу это сделать
CONTROLLER
public ActionResult ManagePhotos(ManagePhotos model)
{
if (ModelState.IsValid)
{
byte[] image = model.File; //Its not working .How can convert this to byte array
}
}
Ответы
Ответ 1
Как говорит Дарин, вы можете читать из потока ввода - но я бы не стал полагаться на все данные, доступные за один раз. Если вы используете .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();
}
Ответ 2
Вы можете прочитать его из входного потока:
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
. Вы можете найти следующее сообщение в блоге.