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

可以用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. Expo大作战(三十三)--expo sdk api之MapView(地图),MailComposer(磁力传感计),Lottie(动画)

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  2. Django 认证

    from django.contrib import auth 1.authenticate() 提供了用户认证,即验证用户名以及密码是否正确,一般需要username和password两个关键字参数 ...

  3. Python-初识模块

    #系统自带的模块 import sys print(sys.path)#打印环境变量 print(sys.argv)#打印绝对路径 import os #cmd_res = os.system(&qu ...

  4. [20171106]配置客户端连接注意.txt

    [20171106]配置客户端连接注意.txt --//在配置客户端连接时一般建议使用Net Manager工具,windows下调用执行Net Manager.--//linux下执行 netmgr ...

  5. Jquery获取当前页面中的复选框选中的内容

    在使用$.post提交数据时,有一个数据是复选框获取数据,所以在当前页面获取到复选框选中的值并提交到后端卡住了一下,解决方法如下: 这两个input就是复选框的内容: str += "< ...

  6. asp在线压缩和解压缩文件(文件夹)

    <%'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\'\\ 1. c:\windows\system32\cmd.e ...

  7. React路由 + 绝对路径引用

    路由: 哈希路由(在url地址后加   #name) // 实现页面监听 window.onhashchange = function(){ console.log(‘hash:’,window.lo ...

  8. 软件工程实践_Task2_sudoku

    软工实践_Task2 标签(空格分隔): 软工实践 相关要求:第二次作业--个人项目实战 github:传送门 解题思路 先是一点杂谈. 首先,看完作业要求之后,心里先有个大概的框架. 语言:C++ ...

  9. 17秋 软件工程 第六次作业 Beta冲刺 Scrum5

    17秋 软件工程 第六次作业 Beta冲刺 Scrum5 各个成员冲刺期间完成的任务 世强:完成APP端相册.部员管理.手势签到模块: 陈翔:完成Scrum博客.总结博客,完成超级管理员前后端对接: ...

  10. 【Nginx】什么是Nginx?为什么使用Nginx?

    转文章 一.前言 为毛要用nginx服务器代理,不直接用tomcat 7.0,还做多了一次接请求? 这个是我想问的,公司的新项目是要用Nginx+tomcat7+jdk开发的,用户命名可以直接访问to ...