Загрузка нескольких файлов в asp.net mvc

Мне нужно получить файлы из одного файлового загрузчика и нескольких загрузчиков файлов из той же формы. А также нужно знать, из какого поля ввода эти файлы идут. Из файла Request.Files я могу получить все файлы, но не могу узнать, из какого поля они будут поступать.

У меня есть форма.

<form> 
    <input type="file" name="file1">
    <input type="file" name="files" multiple="true"> 
</form>`

Ответ 1

Используйте модель вместо Request.Files напрямую. Основываясь на вашем представлении, вы можете сделать что-то вроде этого:

public class UploadForm
{
    public HttpPostedFileBase file1 {get;set;}

    public IEnumerable<HttpPostedFileBase> files {get;set;}
}

И затем в вашем действии:

public ActionResult Uploade(UploadForm form)
{
    if(form.file1 != null)
    {
        //handle file
    }

    foreach(var file in form.files)
    {
        if(file != null)
        {
            //handle file
        }
    }
    ...
}

Ответ 2

Если эти два элемента управления загрузкой имеют разные атрибуты имени, вы можете позволить привязке модели выполнять эту работу. Вам просто нужно указать параметр в действии контроллера так же, как имя вашего элемента управления загрузкой.

public ActionResult Upload(HttpPostedFileBase file1, IEnumerable<HttpPostedFileBase> files)
{
    ...
}