Asp.net MVC: загрузить несколько файлов изображений?
Есть ли хороший пример того, как загрузить несколько файлов изображений в asp.net mvc? Я знаю, что мы можем использовать HttpPostedFileBase для загрузки одного файла. Есть ли способ загрузить несколько файлов, нажав одну кнопку?
Я использовал загрузку файлов в ajaxtoolbox в webform раньше и как это работает. Есть ли аналогичный способ в MVC? или существует ли существующий контроль, который может сделать это хорошо? лучше контролировать, но это нормально, даже оно стоит несколько $.
Спасибо
Ответы
Ответ 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();
}