本文乃是博主早期写的,此种思路虽然实现了,但固然不是最好的,仅做参考学习。

可以用js onprogress 、fileinput 、webuploader、jq ajaxsubmit等实现

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

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

下面贴一张效果图:

前端ajax上传文件,我使用了两种jq插件。一种是ajaxfileupload,一种是jquery.form.js(如需下载,请百度)

下面的代码是ajaxFileUpload的:

$.ajaxFileUpload({url: '/WxManage/Media/UploadImage', //用于文件上传的服务器端请求地址secureuri: false, //是否需要安全协议,一般设置为falsefileElementId: 'postFile', //文件上传域的IDtype:"post",dataType: 'json', //返回值类型 一般设置为jsonsuccess: function(data, status) //服务器成功响应处理函数
            {CloseProgressbar();//关闭进度条 设置进度条进度为100if (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:

 1 [HttpPost]
 2         public ActionResult UploadImage(HttpPostedFileBase postFile)
 3         {
 4             if (postFile == null)
 5             {
 6                 return Json(BasicConfig.MessageConfig.Fail("上传文件不得为空"));
 7             }
 8
 9             try
10             {
11                 string format = postFile.FileName.Split('.').Last();//后缀名
12                 SaveFile(postFile);
13                 return Json(BasicConfig.MessageConfig.Success("上传成功"));
14             }
15             catch (Exception ex)
16             {
17                 return Json(BasicConfig.MessageConfig.Fail("上传失败"));
18             }
19         }

SaveFile方法是保存文件的方法,采用的是文件流方式保存以便于计算上传进度:核心代码:
 1                 FileStream fs = new FileStream(fileSavePath, FileMode.Create);
 2                 BinaryWriter bw = new BinaryWriter(fs);
 3                 BinaryReader br = new BinaryReader(postFile[i].InputStream);
 4
 5                 int readCount = 0;//单次读取的字节数
 6                 while ((readCount = br.Read(bufferByte, 0, readBufferSize)) > 0)
 7                 {
 8                     bw.Write(bufferByte, 0, readCount);//写入字节到文件流
 9                     bw.Flush();
10                     saveCount += readCount;//已经上传的进度
11                     mem.SetValue("Admin_UploadSpeed_" + Session.SessionID, (saveCount * 1.0 / totalCount).ToString("0.00"), 60);//将更新到memcached缓存中
12                     Thread.Sleep(200);//为了看到明显的过程故意暂停
13                 }        

asp.net mvc 实现上传文件带进度条相关推荐

  1. ServletFileUpload上传文件带进度条

    ServletFileUpload上传文件带进度条 涉及了两个架包:commons-io-2.0.1.jar,commons-fileupload-1.2.2.jar,还有一个jquery-2.2.4 ...

  2. ASP.Net上传文件带进度条、显示剩余时间!

    近段时间因为开发隐私存储网站,采用ASP.Net 2.0在处理上传文件,因为上传的文件比较大,为了改善用户体验,所以自己重写了ASP.Net 的标准上传控件,实现显示进度条,百分比,平均速度,剩余时间 ...

  3. EXTJS+JSP上传文件带进度条

    需求来源是这样的:上传一个很大的excel文件到server, server会解析这个excel, 然后一条一条的插入到数据库,整个过程要耗费很长时间,因此当用户点击上传之后,需要显示一个进度条,并且 ...

  4. java mvc上传文件进度_java相关:springMVC+ajax实现文件上传且带进度条实例

    java相关:springMVC+ajax实现文件上传且带进度条实例 发布于 2020-7-5| 复制链接 本篇文章主要介绍了springMVC+ajax实现文件上传且带进度条实例,具有一定的参考价值 ...

  5. php带截切图片上传_PHP大文件切割上传并带进度条功能示例

    本文实例讲述了PHP大文件切割上传并带进度条功能.分享给大家供大家参考,具体如下: 前面一篇介绍了PHP大文件切割上传功能,这里再来进一步讲解PHP大文件切割上传并带进度条功能. 项目结构图: 14- ...

  6. 异步上传文件显示进度条

    异步上传文件显示进度条 原文地址:异步上传文件显示进度条 问题 我们在写网站时难免会遇到需要上传文件的场景,但当上传大文件时比如5个G的文件直接用表单直接提交文件会出现页面卡顿.未响应等影响用户体验的 ...

  7. 上传文件显示进度条_文件上传带进度条进阶-断点续传

    说明 1. 把文件按大小1M分割成N份 2. 每次上传时,告诉后台大文件的md5.当前第几份(从0开始).总共几份 3. 并行上传,前端同时开启5个请求进行传输增加速度 4. 上传失败或出错后,继续上 ...

  8. 让asp.net默认的上传组件支持进度条反映(转)

    对于web下的上传,实际上更多的时候不用上传太大东西,asp.net默认的上传组件足够用了,美中不足就是没有上传进度反映,所以现在要做的就是在asp.net默认的上传基础上加上进度反映. 关于web上 ...

  9. android 正在上传动画,安卓系统上传文件动态显示进度条,进度条经常卡在99%有时也会卡住不显示完整的文字。...

    使用var task = plus.uploader.createUpload上传文件时,添加上传状态监听事件 task.addEventListener("statechanged&quo ...

最新文章

  1. C#开发中关于加密解密字符串的使用方法
  2. 全部python编程语言-可以用 Python 编程语言做哪些神奇好玩的事情?
  3. 假日教程-ZStack映像檔系列(TurnkeyLinux Observium)
  4. lua--面向对象使用middleclass
  5. VC++调用UpdateLayeredWindow实现半透明窗体【转】
  6. 编程竞赛控制系统(PC2)使用说明书
  7. JanusGraph: 可视化 Gephi 插件安装
  8. 火出边际的Serverless,你居然还不了解?
  9. 实验五 存储管理实验
  10. 状态机编程 (一) 状态机相关概念
  11. 关于pr(Premiere)的记录
  12. 香山芯片调试目标完成,直播完毕
  13. 论数据库运维的全流程管控技术
  14. HTTPs SSL OV、DV和EV证书的区别
  15. 天数计算(某日(时间戳)到今天的天数、两个日期相差的天数)
  16. 空间句法(二)——Axwoman 6.0
  17. [射影几何]射影线束画二次曲线
  18. (八)《跟我一起写Makefile》之使用函数
  19. [AV1] AV1 Reference Software
  20. [英语阅读]保时捷与大众共商合并大计

热门文章

  1. 现有系统如何集成Consul服务发现
  2. vue2+vuex+vue-router 快速入门(三) vue 实例介绍
  3. Linux常用解压文件
  4. 《Redis官方教程》-Redis安全
  5. open in browser
  6. atitit.集合的filt操作细分 filter总结
  7. Impala SQL 语言参考
  8. php使用 memcache 来存储 session
  9. WebResponse 跨域访问
  10. 推荐系统-Task05推荐系统流程构建