Подтвердить что ты не робот

Asp.net MVC: загрузить несколько файлов изображений?

Есть ли хороший пример того, как загрузить несколько файлов изображений в asp.net mvc? Я знаю, что мы можем использовать HttpPostedFileBase для загрузки одного файла. Есть ли способ загрузить несколько файлов, нажав одну кнопку?

Я использовал загрузку файлов в ajaxtoolbox в webform раньше и как это работает. Есть ли аналогичный способ в MVC? или существует ли существующий контроль, который может сделать это хорошо? лучше контролировать, но это нормально, даже оно стоит несколько $.

Спасибо

4b9b3361

Ответ 1

Используйте этот плагин jQuery

просто включите файлы jn файлов плагинов, создайте тег:

<input type='file' multiple id='fileUpload' name="files[]" data-url="@Url.Action("Upload","Home")" />

(За исключением IE9 он не позволяет выбирать несколько файлов в диалоговом окне выбора)

Добавить JavaScript:

$(function () {
    $('#fileUpload').fileupload({
        dataType: 'json',
        done: function (e, data) {
            $.each(data.result.files, function (index, file) {
                $('<p/>').text(file.name).appendTo(document.body);
            });
        }
    });
});

В действии контроллера просто проверьте Request.Files и сделайте все, что хотите. Вот хорошая документация

[HttpPost]
public JsonResult Upload() 
{
    foreach (var file in Request.Files)
    {
        if(file.ContentLength > 0)
        {
            file.SaveAs(Server.MapPath("~/Upload/" + file.FileName));
        }
    }

    return Json(new { result = true });
}

Ответ 2

Вы можете выполнить действие с POST http verb, чтобы получить коллекцию HttpPostedFileBase и сохранить все файлы, для образца:

[HttpPost]
public ActionResult Upload(IEnumerable<HttpPostedFileBase> files) 
{
    foreach (var file in files)
    {
        file.SaveAs(Server.MapPath("~/Update/" + file.FileName));
    }

    return View();
}

В качестве альтернативы вы можете прочитать Request.Files и выполнить ту же работу,

[HttpPost]
public ActionResult Upload() 
{
    foreach (var file in Request.Files)
    {
        file.SaveAs(Server.MapPath("~/Update/" + file.FileName));
    }

    return View();
}

См. также

Ответ 3

Я использую этот. https://www.fyneworks.com/jquery/multiple-file-upload/

<input type="file" name="file" class="multiple" /> 

[HttpPost] 
public ActionResult Upload()  
{
    if (Request.Files.Count > 0)
    {
          foreach(var file in Request.Files) {  }
    }

    return View(); 
}

Ответ 4

Некоторые базовые бит, необходимые для загрузки файлов

Ключевое слово извещения: несколько во входном элементе И multipart в элементе формы

Сторона HTML

@using (Html.BeginForm("MyUpload", "MyController", FormMethod.Post, new { enctype = "multipart/form-data" })) { 
    <input type="file" name="myFiles" multiple />
    <button class="btn btn-default">Upload</button>   
}

контроллер

[HttpPost]
public ActionResult MyUpload(IEnumerable<HttpPostedFileBase> myFiles)
{
    foreach (var file in myFiles)
    {
        if (file != null && file.ContentLength > 0)
        {
            //handle files;
        }
    }
    return View();
}