Вот как вы можете загружать файлы в ASP.NET MVC, не обращаясь к HttpHandler (* .ashx):
Предположим, вы хотите создать новый профиль пользователя. Каждый профиль имеет имя и изображение профиля.
1) Объявить модель. Используйте HttpPostedFileBase для изображения профиля.
public class ProfileModel
{
public string Name { get; set; }
public HttpPostedFileBase ProfilePicture { get; set; }
}
2) Используйте эту модель для создания представления, содержащего форму, которую можно использовать для создания нового профиля. Не забудьте указать enctype = "multipart / form-data".
<% using (Html.BeginForm("Add", "Profiles", FormMethod.Post,
new { enctype = "multipart/form-data" })) { %>
<%=Html.TextBoxFor(m => m.Name)%>
<input type="file" id="ProfilePicture" name="ProfilePicture" />
<input type="submit" value="Save" />
<% }%>
3) Объявите метод действия в вашем контроллере, который принимает опубликованную форму. Здесь вы можете получить доступ к потоку, представляющему загруженный файл. В следующем примере кода поток считывается в байтовый массив (буфер). После этого вы можете сохранить файл в файловой системе, базе данных ... и т. Д.
[HttpPost]
public ActionResult Add(ProfileModel model)
{
if (model.ProfilePicture != null && model.ProfilePicture.InputStream != null)
{
var filename = model.ProfilePicture.FileName;
var buffer = new byte[model.ProfilePicture.InputStream.Length];
model.ProfilePicture.InputStream.Read(buffer, 0,
(int) model.ProfilePicture.InputStream.Length);
//...
}
}