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, опция пакетного кендо будет загружать файлы только в виде коллекции, если она выбрана одновременно (просмотрите, затем выберите более одного файла). После выбора дополнительных файлов они будут отправлены в другом запросе. Единственный способ заставить файлы публиковаться во время одного и того же запроса - использовать синхронный режим, а не асинхронный. Удачи.

Другие вопросы по тегам