前言文件上传与下载的操作在实际项目中经常是很重要的一个内容,在使用ASP。NET Web Form的时候我们可以使用诸多的服务器控件,FileIpload就是其中之一,但是在ASP。NET不建议使用那些服务器控件,因为那样违反三层架构原则。最近参考网络资料,学习了ASP。
NET MVC如何上传文件。而这篇文章主要重点是asp。net mvc 实现文件上传带进度条,下面来一起看看吧。实现思路ajax异步上传文件,且开始上传文件的时候启动轮询来实时获取文件上传进度。保存进度我采用的是memcached缓存,因为项目其他地方也用了的,所以就直接用这个啦。
注意:不能使用session来保存进度,因为session是线程安全的不能实时获取进度,可是试试httpcache或者memorycache,这两个我没有试过,请自行尝试。ps:使用websocket来实现也是不错的,不过我没有试过,有心的大神可以去试试。
下面贴效果图:实现方法如下前端ajax上传文件,我使用了两种jq插件。一种是ajaxfileupload,一种是jquery。form。js(如需下载,请百度)。关于更多jQuery插件用法还可参阅本站相关专题: 《jQuery常用插件及用法总结》 。
下面的代码是ajaxFileUpload的:$。ajaxFileUpload ( { url: ‘/WxManage/Media/UploadImage’, //用于文件上传的服务器端请求地址 secureuri: false, //是否需要安全协议,一般设置为false fileElementId: ‘postFile’, //文件上传域的ID type:”post”, dataType: ‘json’, //返回值类型 一般设置为json success: function(data, status) //服务器成功响应处理函数 { CloseProgressbar();//关闭进度条 设置进度条进度为100 if (data。
status == 1) { layer。msg(data。msg, { icon: 1, time: 1000 },function() { parent。location。reload(); }); } else { $(“#btnUploadFile”)。
attr(“disabled”, false); layer。msg(data。msg, { icon: 2, time: 1000 }); } }, error: function(data, status, e) //服务器响应失败处理函数 { $(“#btnUploadFile”)。
attr(“disabled”, false); CloseProgressbar(); layer。closeAll(“dialog”); layer。msg(“上传失败”, { icon: 2, time: 1000 }); } } );后端接收文件上传请求的action:[HttpPost] public ActionResult UploadImage(HttpPostedFileBase postFile) { if (postFile == null) { return Json(BasicConfig。
MessageConfig。Fail(“上传文件不得为空”)); } try { string format = postFile。FileName。Split(‘。’)。Last();//后缀名 SaveFile(postFile); return Json(BasicConfig。
MessageConfig。Success(“上传成功”)); } catch (Exception ex) { return Json(BasicConfig。MessageConfig。Fail(“上传失败”)); } }SaveFile方法是保存文件的方法,采用的是文件流方式保存以便于计算上传进度:核心代码:FileStream fs = new FileStream(fileSavePath, FileMode。
Create); BinaryWriter bw = new BinaryWriter(fs); BinaryReader br = new BinaryReader(postFile[i]。InputStream); int readCount = 0;//单次读取的字节数 while ((readCount = br。
Read(bufferByte, 0, readBufferSize)) > 0) { bw。Write(bufferByte, 0, readCount);//写入字节到文件流 bw。Flush(); saveCount += readCount;//已经上传的进度 mem。
SetValue(“Admin_UploadSpeed_” + Session。SessionID, (saveCount * 1。0 / totalCount)。ToString(“0。00”), 60);//将更新到memcached缓存中 Thread。
Sleep(200);//为了看到明显的过程故意暂停 }。
1.文章《asp.net mvc 实现文件上传带进度条的思路与方法》援引自互联网,为网友投稿收集整理,仅供学习和研究使用,内容仅代表作者本人观点,与本网站无关,侵删请点击页脚联系方式。
2.文章《asp.net mvc 实现文件上传带进度条的思路与方法》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
相关推荐
- . 现代买票为什么带上携程保险
- . 潮阳怎么去广州南站
- . 湖南马拉河怎么样
- . 烧纸为什么到三岔路口
- . 百色为什么这么热
- . 神州租车怎么样
- . 芜湖方特哪个适合儿童
- . 护肤品保养液是什么类目
- . 早晚的护肤保养有哪些项目
- . 女孩护肤品怎么保养的最好