我正在使用剑道文件上传控件来上传多个文件。只有少数文件被上传(尤其是第一个和最后一个)或一些随机文件。有什么解决方案吗?
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 获取,而不是为多个文件多次调用它,那就太好了。
我错过了什么或做错了什么吗?
谢谢Srini
此代码将上传在剑道上传中选择的所有文件,然后对每个文件运行代码。
[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,如果同时选择,剑道批处理选项只会将文件作为集合上传(浏览,然后选择多个文件)。选择其他文件后,它们将在另一个请求中发送。在同一请求期间强制发布文件的唯一方法是使用同步模式而不是异步模式。祝你好运。