Загрузка файла в MVC с использованием файла обработчика - PullRequest
0 голосов
/ 03 августа 2011

Я использовал загрузчик файлов, используя файл httphandler (.ashx), но он работает в обычном веб-приложении .net.Сейчас я пытаюсь использовать то же самое в MVC, но не могу этого сделать.Может ли какое-либо тело помочь мне решить эту проблему или предложить какой-либо другой способ.

1 Ответ

1 голос
/ 14 августа 2011

Вот как вы можете загружать файлы в 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);

        //...
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...