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

可以用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. retrofit框架接口调用时候报Throwing new exception

    最近在开发的时候遇到了一个很坑的问题,在三星6.0手机上请求接口时候报了一个异常:Throwing new exception 'length=1658; index=3248' with unexp ...

  2. linux networking

    ip route解读 default via 192.168.1.1 dev wlan0 dev wlan0 proto kernel scope link src 192.168.1.100 htt ...

  3. 使用linq语句进行联表查询

    假设你有一个父表(例如:汽车),其关联一个子表,例如轮子(一对多).现在你想对于所有的父表汽车,遍历所有汽车,然后打印出来所有轮子的信息.默认的做法将是: SELECT CarId FROM Cars ...

  4. Android i2c-tools移植

    一.下载I2C-tools工具: 最近在移植i2c-tools工具,下载地址:https://i2c.wiki.kernel.org/index.php/I2C_Tools:百度到了wiki中的git ...

  5. C++基础算法学习——N皇后问题

    n皇后问题:输入整数n, 要求n个国际象棋的皇后,摆在n*n的棋盘上,互相不能攻击,输出全部方案. 代码如下: #include <iostream> #include<cmath& ...

  6. Matplotlib入门

    使用之前首先下载:pip install  Matplotlib 接着引入:import matplotlib.pylot as plt 绘图函数:plt.plot() 显示函数:plt.show() ...

  7. 用Python读写Excel文件的方式比较

    虽然天天跟数据打交道,也频繁地使用Excel进行一些简单的数据处理和展示,但长期以来总是小心地避免用Python直接读写Excel文件.通常我都是把数据保存为以TAB分割的文本文件(TSV),再在Ex ...

  8. 1346:【例4-7】亲戚(relation)

    并查集的模板题: #include<iostream> #include<cstdio> using namespace std; ; int fa[maxn]; int fi ...

  9. 字典树模板题(统计难题 HDU - 1251)

    https://vjudge.net/problem/HDU-1251 标准的字典树模板题: 也注意一下输入方法: #include<iostream> #include<cstdi ...

  10. EXCEL这样根据某单元格的内容来改变整行颜色

    1.选择你需要改变颜色的单元格列数,然后打开“格式”--“条件格式”: 2.选择“公式”一项,在后面输入=$L1=2050,然后点开下面的“格式”按钮设置好格式. 3.基本上就OK了,注意在输入公式的 ...