运作模式
同步模式
同步模式下的Upload行为类似于常规的文件输入——在提交表单时上传所选文件,用户可以选择一组文件。当Upload处于同步模式时,浏览器不必支持多个文件选择。
.
public IWebHostEnvironment设置;} public UploadController(IWebHostEnvironment webHostEnvironment) {webHostEnvironment = webHostEnvironment;} public ActionResult Submit(IEnumerable files){//上传组件的名称为files。if (files != null) {foreach (var file in files) {var fileContent = ContentDispositionHeaderValue.Parse(file. contentdisposition);//有些浏览器会发送带有完整路径的文件名。// demo只对文件名感兴趣。var fileName = Path.GetFileName(fileContent.FileName.ToString().Trim('"'));var physicalPath = Path.Combine(WebHostEnvironment. varWebRootPath, "App_Data", fileName);using (var fileStream = new fileStream (physicalPath, FileMode.Create)){等待file.CopyToAsync(fileStream); } } } return View("Result"); }
异步模式
异步模式下的Upload需要专用的服务器处理程序来存储和删除上传的文件。文件立即上传,或者在用户确认后上传(可选)。上传请求在不中断页面流的情况下在带外执行。异步模式是通过HTML5文件API.
@(Html.Kendo().Upload() .Name("files") .Async(a => a .Save("SaveAsync", "Upload") .Remove("Remove", "Upload") .AutoUpload(true))))
public IWebHostingEnvironment WebHostEnvironment {get;设置;} public UploadController(IWebHostEnvironment webHostEnvironment) {webHostEnvironment = webHostEnvironment;} public async Task SaveAsync(IEnumerable files) {// Upload组件的名称为files。if (files != null) {foreach (var file in files) {var fileContent = ContentDispositionHeaderValue.Parse(file. contentdisposition);//有些浏览器会发送带有完整路径的文件名。//我们只对文件名感兴趣。var fileName = Path.GetFileName(fileContent.FileName.ToString().Trim('"'));var physicalPath = Path.Combine(WebHostEnvironment. varWebRootPath, "App_Data", fileName);using (var fileStream = new fileStream (physicalPath, FileMode.Create)){等待file.CopyToAsync(fileStream); } } } // Return an empty string to signify success. return Content(""); } public ActionResult Remove(string[] fileNames) { // The parameter of the Remove action must be called "fileNames". if (fileNames != null) { foreach (var fullName in fileNames) { var fileName = Path.GetFileName(fullName); var physicalPath = Path.Combine(WebHostEnvironment.WebRootPath, "App_Data", fileName); // TODO: Verify user permissions. if (System.IO.File.Exists(physicalPath)) { System.IO.File.Delete(physicalPath); } } } // Return an empty string to signify success. return Content(""); }
处理程序
的保存
处理者必须接受帖子
请求。请求将包含一个或多个与输入
——例如,“文件[]”
在前面控制器
的例子。处理程序将返回以下响应中的任何一个:
- 表示成功的空洞回答。
- JSON字符串
“文本/普通”
内容编码。反序列化对象可在成功
事件处理程序,再次表示成功。 - 任何其他表示失败的响应。
的删除
处理者必须接受帖子
请求。属性的请求将包含一个或多个文本字段“文件名”[]
的名字。处理程序将返回以下响应中的任何一个:
- 表示成功的空洞回答。
- JSON字符串
“文本/普通”
内容编码。反序列化对象可在成功
事件处理程序,再次表示成功。 - 任何其他表示失败的响应。
异步模式回退
当Upload被放置在形式
并且被配置为异步操作,因此它支持回退机制。未完全上传的文件将作为形式
在其提交的用户,这确保没有文件丢失,即使你不采取任何特殊措施来阻止提交按钮。
上传的文件必须在保存
处理程序和形式
提交动作,如在同步模式中。