1

我正在使用 Kendo File Upload 控件来上传多个文件。只有少数文件被上传(尤其是第一个和最后一个)或一些随机文件。有什么解决方案吗?

索引.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 获取,而不是为多个文件多次调用它,那就太好了。

我有什么遗漏或做错了吗?

谢谢,斯里尼

4

2 回答 2

1

此代码将上传在 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;
于 2015-05-04T16:46:48.390 回答
0

IIRC,剑道批处理选项仅在同时选择时将文件作为集合上传(浏览,然后选择多个文件)。选择其他文件后,它们将在另一个请求中发送。您可以强制在同一请求期间发布文件的唯一方法是使用同步模式而不是异步。祝你好运。

于 2015-04-28T23:49:26.530 回答