Я использую Bootstrap File Input - плагин Kartik для загрузки нескольких файлов в приложение MVC 5.
Я создал следующую HTML-разметку
<input id="fileUpload" type="file" class="file" multiple>
Затем я инициализировал загрузчик файлов следующим образом
$fileTC.fileinput({
uploadUrl: "/TacPham/Upload",
uploadAsync: false,
browseOnZoneClick: true,
allowedFileTypes: ['image']
});
Я пытаюсь загрузить файлы с помощью Ajax-запроса на сервер.
$('#btnXuLy').click(function () {
var model = {
tenTacPham: $('#txtTenTacPham').val(),
loaiTacPham: $('#seLoaiTacPham').val(),
chuDe: $('#seChuDe').val(),
noiDung: $('#taNoiDung').val(),
idNguoiDung: hid_IDNguoiDung_Default,
email: hid_Email_Default
};
$fileTC.fileinput('refresh', {
uploadExtraData: model
});
$fileTC.fileinput('upload');
$fileTC.on('filebatchuploadsuccess', function (event, data) {
var form = data.form, files = data.files, extra = data.extra, response = data.response;
console.log(data);
console.log(response);
console.log(files);
console.log(extra);
console.log('File batch upload success');
});
})
После того, как я нажму кнопку «Загрузить», запрос достиг моего сервера, как и ожидалось, но мой сервер увидит только один файл вместо всех них
Вот как выглядит мой метод
[HttpPost]
public ActionResult Upload(TacPhamJsonModel model)
{
var error = "";
foreach (string item in Request.Files)
{
HttpPostedFileBase getEle = Request.Files[item] as HttpPostedFileBase;
var uploadPath = "~/Documents/";
var finalPath = Path.Combine(HttpContext.Request.MapPath(uploadPath), getEle.FileName);
getEle.SaveAs(finalPath);
}
return Json(error);
}
Request.Files.Count возвращает 1 событие, хотя я загрузил 3 или 5 файлов одновременно.