Kendo UI проблема с загрузкой нескольких файлов
Я использую элемент управления загрузкой файлов Kendo для загрузки нескольких файлов. Загружаются только несколько файлов (особенно первый и последний) или несколько случайных. Есть ли решение для этого?
Index.cshtml:
<input name="files" id="files" type="file" multiple="multiple" />
Файл JS:
$("#files").kendoUpload
({
async: {
saveUrl: "/Controller/GetUserUploadedFiles",
removeUrl: "/Controller/Remove",
autoUpload: false,
allowmultiple: true
},
select: function (e) {
onSelect(e);
},
success: function (e) {
},
error: function (e) {
}
});
// Метод контроллера
[HttpPost]
public void GetUserUploadedFiles(IEnumerable<HttpPostedFileBase> files)
{
//Custom logic here
}
Кроме того, было бы здорово, если бы я мог получить все файлы как Enumerable за один вызов метода контроллера, а не вызывать его несколько раз для нескольких файлов.
Что-то я пропускаю или делаю неправильно?
Спасибо, Срини
2 ответа
Этот код загрузит все файлы, которые были выбраны в Kendo Upload, а затем запустит код для каждого.
[HttpPost]
public void GetUserUploadedFiles()
{
Request.Content.LoadIntoBufferAsync().Wait();
var result = Task.Factory
.StartNew(() => Request.Content.ReadAsMultipartAsync().Result,
CancellationToken.None,
TaskCreationOptions.LongRunning,
TaskScheduler.Default).Result;
var contents = result.Contents;
HttpContent httpContent = contents.First();
Stream file = httpContent.ReadAsStreamAsync().Result;
if (file.CanRead)
{
// Code that will be executed on each file
}
}
Вы можете получить имя файла, используя:
string filename = httpContent.Headers.ContentDisposition.FileName.Replace("\"", string.Empty);
Вы можете получить загруженный файл типа носителя с помощью:
string uploadedFileMediaType = httpContent.Headers.ContentType.MediaType;
IIRC, опция пакетного кендо будет загружать файлы только в виде коллекции, если она выбрана одновременно (просмотрите, затем выберите более одного файла). После выбора дополнительных файлов они будут отправлены в другом запросе. Единственный способ заставить файлы публиковаться во время одного и того же запроса - использовать синхронный режим, а не асинхронный. Удачи.