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

可以用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, //是否需要安全协议,一般设置为false
fileElementId: 'postFile', //文件上传域的ID
type:"post",
dataType: 'json', //返回值类型 一般设置为json
success: function(data, status) //服务器成功响应处理函数
{
CloseProgressbar();//关闭进度条 设置进度条进度为100
if (data.status == ) {
layer.msg(data.msg, { icon: , time: },function() {
parent.location.reload();
});
} else {
$("#btnUploadFile").attr("disabled", false);
layer.msg(data.msg, { icon: , time: });
}
},
error: function(data, status, e) //服务器响应失败处理函数
{
$("#btnUploadFile").attr("disabled", false);
CloseProgressbar();
layer.closeAll("dialog");
layer.msg("上传失败", { icon: , time: });
}
}
);

后端接收文件上传请求的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 = ;//单次读取的字节数
while ((readCount = br.Read(bufferByte, , readBufferSize)) > )
{
bw.Write(bufferByte, , readCount);//写入字节到文件流
bw.Flush();
saveCount += readCount;//已经上传的进度
mem.SetValue("Admin_UploadSpeed_" + Session.SessionID, (saveCount * 1.0 / totalCount).ToString("0.00"), );//将更新到memcached缓存中
Thread.Sleep();//为了看到明显的过程故意暂停
}

asp.net mvc 实现上传文件带进度条的更多相关文章

  1. ASP.NET Jquery+ajax上传文件(带进度条)

    效果图 支持ie6+,chrome,ie6中文文件名会显示乱码. 上传时候会显示进度条. 需要jquery.uploadify.js插件,稍后会给出下载 前台代码 <%@ Page Langua ...

  2. Extjs 使用fileupload插件上传文件 带进度条显示

    一.首先我们看看官方给出的插件的解释: 一个文件上传表单项具有自定义的样式,并且可以控制按钮的文本和 像文本表单的空文本类似的其他特性. 它使用一个隐藏的文件输入元素,并在用户选择文件后 在form提 ...

  3. FormData上传文件 带进度条

    * jQuery ajax  FormData 上传文件 template $.ajax({ url: url, type: 'POST', data: new FormData(form), dat ...

  4. java进行文件上传,带进度条

    网上看到别人发过的一个java上传的代码,自己写了个完整的,附带源码 项目环境:jkd7.tomcat7. jar包:commons-fileupload-1.2.1.jar.commons-io-1 ...

  5. Asp.Net Mvc异步上传文件的方式

    今天试了下mvc自带的ajax,发现上传文件时后端action接收不到文件, Request.Files和HttpPostedFileBase都接收不到.....后来搜索了下才知道mvc自带的Ajax ...

  6. layui上传文件配合进度条

    首先看一下效果图: 修改layui的源文件upload.js 1.打开layui/modules/upload.js 2.搜索ajax 3.找到url: 4.添加以下代码: ,xhr:l.xhr(fu ...

  7. 【Web】前端文件上传,带进度条

    最近做项目发现,在文件上传的过程中,增加进度条,能大大改善用户体验.本例介绍带进度条的文件上传 环境搭建 参考:[Java]JavaWeb文件上传和下载. 原生ajax上传带进度条 <%@ pa ...

  8. servlet多文件上传(带进度条)

    需要commons-fileupload-1.3.jar和commons-io-2.4.jar的支持 页面效果:(图片文件都可以) (1)进度标识类 public class UploadStatus ...

  9. web文件上传,带进度条

    原生ajax上传带进度条 (百分比) <%@ page language="java" contentType="text/html; charset=UTF-8& ...

随机推荐

  1. window服务器上mongodb的安装与如何将mongodb设置为服务,为mongodb设置管理用户,mongodb连接字符串配置

    最近公司有一个项目模块让用nosql-mongodb替换了,故,对mongodb做了一点研究,然后分享一下! 1.首先说一下安装时的坑 下载mongodb,如果你从官网下载,将会是一件很慢的事情,在公 ...

  2. [Objective-C] 创建常量

    新博客wossoneri.com #define宏定义 #define是一条预编译指令, 编译器在编译阶段前期会将所有使用到宏的地方简单地进行替换. 在预处理器里进行文本替换,没有类型,不做任何类型检 ...

  3. C语言编程比赛WBS

  4. CRM原型

    https://files.cnblogs.com/files/wcLT/CRM.zip

  5. python第十六天,昨天来晚了,作业终于完成了

    作业 1: 员工信息表程序,实现增删改查操作 可进行模糊查询,语法至少支持下面3种: select name,age from staff_table where age > 22 select ...

  6. cropper实现基本的裁剪图片并上传

    使用cropper之前需要先引用 cropper.css 和 cropper.js cropper 官网:https://fengyuanchen.github.io/cropper/ cropper ...

  7. 在LINUX上部署SOFA

    JDK1.6环境变量 vim /etc/profile JAVA_HOME=/usr/local/java/jdk1.6.0_45PATH=$JAVA_HOME/bin:$PATHCLASSPATH= ...

  8. js获取子节点和修改input的文本框内容

    js获取子节点和修改input的文本框内容 js获取子节点: $("#"+defaultPVItemId).children().eq(3); //获取某个选择器下的第四个子节点 ...

  9. Mysql基础之 ALTER命令

    ALTER命令: 作用:当我们修改数据库的列属性.列名称.表名等,要使用ALTER命令 教程: 1.首先是我们创建一个数据库以及一张表 mysql> create table exercise( ...

  10. 初识Python - Python的历史(转)

    声明: 本文转自维基百科 如有意见请联系删除 综述 该编程语言 的Python是在20世纪80年代末的设想,和实施是在1989年12月开始由吉多·范罗苏姆在CWI在荷兰的继任者农行能够异常处理,并与接 ...