宝哥软件园

ASP.NET用MVC实现进度条上传文件的思路和方法

编辑:宝哥软件园 来源:互联网 时间:2021-09-07

文件上传和下载的操作往往是实际项目中非常重要的内容。使用ASP.NET网页表单时,我们可以使用许多服务器控件。FileIpload就是其中之一,但是不建议在ASP.NET使用那些服务器控件,因为它违反了三层架构的原则。最近参考网络资料,在ASP.NET学会了用MVC上传文件。本文的重点是ASP.NET MVC利用进度条实现文件上传。让我们来看看。

实现理念

Ajax异步上传文件,在开始上传文件时开始轮询,实时获取文件上传进度。我使用memcached cache来保存进度,因为项目的其他部分也使用它,所以我直接使用这个。注意:session不能用来保存进度,因为session是线程安全的,不能实时获取进度,但是试试httpcache或者memorycache,我之前没试过。请你自己试试。

用websocket实现ps:是不错的,但是我之前没有试过,所以有心的大神可以试试。

粘贴下面的效果图:

实现方法如下

我使用两个jq插件在前端用ajax上传文件。一个是ajaxfileupload,一个是jquery.form.js(如需下载,请百度)。关于jQuery插件的更多用法,请参考本网站相关主题:《jQuery常用插件及用法总结》。

以下代码是针对ajaxFileUpload的:

$.Ajax file upload({ URL : '/wxmanage/media/uploadimage ',//文件上传的服务器端请求地址为secureuri 3360 false,//是否需要安全协议,一般设置为false fileelement:' postfile ',//文件上传字段的id type3360' post '和datatype3360' JSON ',//返回值类型一般设置为JSON success 3360函数(数据、状态)//服务器成功响应处理//关闭进度条,将进度条设置为100 if(data . status==1){ layer . msg(data . msg,{icon3360 1,time: 1000},function(){ parent . location . reload();});} else { $('#btnUploadFile ')。attr('disabled ',false);layer.msg(data.msg,{ icon: 2,time : 1000 });}},错误:函数(数据、状态、e)//服务器响应失败处理函数{$ ('# btnuploadfile ')。attr ('disabled ',false);CloseProgressbar();layer.closeAll('对话框');Layer.msg('上传失败',{icon: 2,time : 1000 });} } );后端接收文件上传请求的动作:

[http post]公共操作结果上传图像(http postfilebase postfile){ if(postfile==null){ return JSON(basiconfig . messageconfig . fail('上传文件不能为空'));}请尝试{ string format=postFile。文件名。拆分('.').last();//后缀SaveFile(postFile);返回JSON(basiconfig . message config . success('上传成功'));} catch(exception ex){ return JSON(basiconfig . messageconfig . fail('上传失败'));} }SaveFile方法是一种保存文件的方法,以文件流模式保存,计算上传进度:

核心代码:

FileStream fs=新的FileStream(文件保存路径,文件模式。创建);binary writer bw=new binary writer(fs);BinaryReader br=new BinaryReader(PostFile[I])。InputStream);int ReadCount=0;//同时读取的字节数((读取计数=br。read(缓冲区字节,0,读取缓冲区大小))0) {bw。写(缓冲字节,0,读计数);//将字节写入文件流bw。flush();saveCount=readCount//上传的进度mem . setvalue(' admin _ uploadspeed _ ' session . session id),(savecount * 1.0/totalcount)。tostring ('0.00 '),60);//将更新为线程。memcached缓存中的睡眠(200);//故意停顿以便看到明显的过程}总结

以上就是本文的全部内容。希望本文的内容能给你的学习或工作带来一些帮助。有问题可以留言交流。谢谢你的支持。

更多资讯
游戏推荐
更多+