У меня было [много] проблем с этим, и я использовал это в конце;
View
<% using (Html.BeginForm( "PhotoAdd", "Photos", FormMethod.Post, new { enctype = "multipart/form-data" })) { %>
<input type="file" id="file" name="file" class="field" style="width:300px;"/>
<%} %>
Контроллер
var file = Request.Files["file"];
byte[] buf = new byte[file.ContentLength];
file.InputStream.Read(buf, 0, file.ContentLength);
Я не уверен, что это то, что вы ищете, но, как я уже сказал, у меня много проблем, позволяющих пользователям загружать свои фотографии на мой сайт.
По сути, у меня есть View, который содержит поле типа «file» и кнопку «Submit» для события post back.
Тогда в контроллере у меня есть следующее:
[AcceptVerbs( HttpVerbs.Post ), Authorize]
public ActionResult PhotoAdd(FormCollection collection)
{
try
{
var file = Request.Files["file"];
byte[] buf = new byte[file.ContentLength];
file.InputStream.Read(buf, 0, file.ContentLength);
Трудность, с которой я столкнулся, заключалась в том, чтобы заставить контроллер получить запрос вместе с именем файла и путем. После этого я смог преобразовать файл в массив байтов, который затем мог бы сохранить в базе данных SQL и поле изображения.
Единственное, чего мне не хватало, так это метода Form в View, который должен читаться как
<% using (Html.BeginForm( "PhotoAdd", "Photos", FormMethod.Post, new { enctype = "multipart/form-data" })) { %>
Enctype позволяет вам выбрать имя файла и путь к выбранному файлу, чтобы контроллер мог захватить входной поток. Без него я обнаружил, что либо Request.Files был пуст, либо он содержал только имя файла и, следовательно, не мог его открыть.
Как только вы сохранили изображение в своей базе данных, его отображение будет пустяком.
Надеюсь, это ответит на ваш вопрос.