怎么在asp.net mvc中实现一个带进度条的文件上传功能

  介绍

怎么在asp.net mvc中实现一个带进度条的文件上传功能吗?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

<强>实现思路

ajax异步上传文件,且开始上传文件的时候启动轮询来实时获取文件上传进度。保存进度我采用的是memcached缓存,因为项目其他地方也用了的,所以就直接用这个啦。注意:不能使用会话来保存进度,因为会话是线程安全的不能实时获取进度,可是试试httpcache或者memorycache,这两个我没有试过,请自行尝试。

<强> p :使用websocket来实现也是不错的,不过我没有试过,有心的大神可以去试试。

<强>下面贴效果图:

怎么在asp.net mvc中实现一个带进度条的文件上传功能

<强>实现方法如下

前端ajax上传文件,我使用了两种金桥插件。一种是ajaxfileupload,一种是jquery.form.js(如需下载,请百度)。关于更多jQuery插件用法还可参阅本站相关专题:《jQuery常用插件及用法总结》。

<强>下面的代码是ajaxfileupload的:

.ajaxFileUpload美元   ,(   ,{   ,url: & # 39;/WxManage/媒体/UploadImage& # 39;,,//用于文件上传的服务器端请求地址   ,secureuri:假的,,//是否需要安全协议,一般设置为假   ,fileElementId: & # 39; postFile& # 39;,,//文件上传域的ID   ,类型:“post",   ,数据类型:& # 39;json # 39;,,//返回值类型,一般设置为json   ,成功:功能(数据,状态),//服务器成功响应处理函数   ,{   ,CloseProgressbar();//关闭进度条,设置进度条进度为100   ,if  (data.status ==, 1), {   layer.msg才能(data.msg,{,图标:1,时间:,1000,},()函数,{   parent.location.reload才能();   ,,});   ,}else  {   美元才能(“# btnUploadFile") .attr (“disabled",,假);   layer.msg才能(data.msg,{,图标:2,时间:,1000,}),,   ,}   },   ,错误:功能(数据、,状态,e),//服务器响应失败处理函数   ,{   ,$ (“# btnUploadFile") .attr (“disabled",,假);   ,CloseProgressbar ();   ,layer.closeAll (“dialog");   ,layer.msg(“上传失败“,,{,图标:2,时间:,1000,});   ,}   ,}   之前,);

<强>后端接收文件上传请求的行动:

[HttpPost]   ,public  ActionResult  UploadImage (HttpPostedFileBase  postFile)   ,{   ,if  (postFile ==, null)   ,{   ,return  Json (BasicConfig.MessageConfig.Fail(“上传文件不得为空“));   ,}      ,试一试   ,{   ,string  format =, postFile.FileName.Split(& # 39; # 39;公司).Last();//后缀名   ,SaveFile (postFile);   ,return  Json (BasicConfig.MessageConfig.Success(“上传成功“));   ,}   ,catch  (Exception 交货)   ,{   ,return  Json (BasicConfig.MessageConfig.Fail(“上传失败“));   ,}   以前,}

SaveFile方法是保存文件的方法,采用的是文件流方式保存以便于计算上传进度:

<强>核心代码:

FileStream  fs =, new 文件流(FileMode.Create fileSavePath也);   ,BinaryWriter  bw =, new  BinaryWriter (fs);   ,BinaryReader  br =, new 主题(postFile[我].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);//为了看到明显的过程故意暂停,   ,}

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

怎么在asp.net mvc中实现一个带进度条的文件上传功能