BootStrap Progressbar 实现大文件上传的进度条的实例代码


Posted in Javascript onJune 27, 2016

1.首先实现大文件上传,如果是几兆或者几十兆的文件就用基本的上传方式就可以了,但是如果是大文件上传的话最好是用分片上传的方式。我这里主要是使用在客户端进行分片读取到服务器段,然后保存,到了服务器段读取完了之后将分片数据进行组合。

2.前端代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="UploadTest2.aspx.cs" Inherits="Html5UploadTest.UploadTest2" %>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<title>HTML5大文件分片上传示例</title>
<script src="Scripts/jquery-1.8.2.js"></script>
<link href="bootstrap-progressbar/bootstrap-progressbar-3.3.4.css" rel="stylesheet" />
<script src="bootstrap-progressbar/bootstrap-progressbar.js"></script>
<%--<link href="JqueryUI/jquery-ui.css" rel="stylesheet" />
<script src="JqueryUI/jquery-ui.js"></script>--%>
<script>
function uploadFile() {
$("#upload").attr("disabled", "disabled");
var file = $("#file")[0].files[0], //文件对象
fileNum = $("#file")[0].files[0].length,
name = file.name, //文件名
size = file.size, //总大小
succeed = 0;
var shardSize = 2 * 1024 * 1024, //以2MB为一个分片
shardCount = Math.ceil(size / shardSize); //总片数
$('.progress .progress-bar').attr('data-transitiongoal', 0).progressbar({ display_text: 'fill' });
for (var i = 0; i < shardCount; ++i) {
//计算每一片的起始与结束位置
var start = i * shardSize,
end = Math.min(size, start + shardSize);
//构造一个表单,FormData是HTML5新增的
var form = new FormData();
form.append("data", file.slice(start, end)); //slice方法用于切出文件的一部分
form.append("name", name);
form.append("total", shardCount); //总片数
form.append("index", i + 1); //当前是第几片
//Ajax提交
$.ajax({
url: "Upload.ashx",
type: "POST",
data: form,
async: true, //异步
processData: false, //很重要,告诉jquery不要对form进行处理
contentType: false, //很重要,指定为false才能形成正确的Content-Type
success: function () {
++succeed;
$("#output").text(succeed + " / " + shardCount);
var percent = ((succeed / shardCount).toFixed(2)) * 100;
updateProgress(percent);
if (succeed == shardCount) {
$("#upload").removeAttr("disabled");
}
}
});
}
}
function progress(percent, $element) {
var progressBarWidth = percent * $element.width() / 100;
$element.find('div').animate({ width: progressBarWidth }, 500).html(percent + "% ");
}
//$(document).ready(function () {
// $('.progress .progress-bar').progressbar({ display_text: 'fill' });
//});
function updateProgress(percentage) {
$('.progress .progress-bar').attr('data-transitiongoal', percentage).progressbar({ display_text: 'fill' });
}
</script>
</head>
<body>
<input type="file" id="file" />
<button id="upload" onclick="uploadFile();">上传</button>
<span id="output" style="font-size: 12px">等待</span>
<div class="progress">
<div id="progressBar" class="progress-bar" role="progressbar" data-transitiongoal=""></div>
</div>
</body>
</html>

3. 后台一般处理程序如下:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
namespace Html5UploadTest
{
/// <summary>
/// Summary description for Upload
/// </summary>
public class Upload : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
try
{
//从Request中取参数,注意上传的文件在Requst.Files中
string name = context.Request["name"];
int total = Convert.ToInt32(context.Request["total"]);
int index = Convert.ToInt32(context.Request["index"]);
var data = context.Request.Files["data"];
//保存一个分片到磁盘上
string dir = context.Request.MapPath("~/temp");
string file = Path.Combine(dir, name + "_" + index);
data.SaveAs(file);
//如果已经是最后一个分片,组合
//当然你也可以用其它方法比如接收每个分片时直接写到最终文件的相应位置上,但要控制好并发防止文件锁冲突
if (index == total)
{
file = Path.Combine(dir, name);
//byte[] bytes = null;
using (FileStream fs = new FileStream(file, FileMode.OpenOrCreate))
{
for (int i = 1; i <= total; ++i)
{
string part = Path.Combine(dir, name + "_" + i);
//bytes = System.IO.File.ReadAllBytes(part);
//fs.Write(bytes, 0, bytes.Length);
//bytes = null;
System.IO.File.Delete(part);
fs.Close();
}
}
}
}
catch (Exception)
{
throw;
}
//返回是否成功,此处做了简化处理
//return Json(new { Error = 0 });
}
public bool IsReusable
{
get
{
return false;
}
}
}
}

4.当然了后台还需要一些异常处理或者断电续传的工作要做,待续。。。

以上所述是小编给大家介绍的BootStrap Progressbar 实现大文件上传的进度条的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8,Firefox,Chrome
Apr 13 Javascript
JavaScript接口实现代码 (Interfaces In JavaScript)
Jun 11 Javascript
JQuery之拖拽插件实现代码
Apr 14 Javascript
jquery.ajax的url中传递中文乱码问题的解决方法
Feb 07 Javascript
判断及设置浏览器全屏模式
Apr 20 Javascript
JS中对象与字符串的互相转换详解
May 20 Javascript
JS实现放大、缩小及拖拽图片的方法【可兼容IE、火狐】
Aug 23 Javascript
jquery属性,遍历,HTML操作方法详解
Sep 17 Javascript
D3.js实现雷达图的方法详解
Sep 22 Javascript
JS遍历对象属性的方法示例
Jan 10 Javascript
Vue.js结合Ueditor富文本编辑器的实例代码
Jul 11 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
Feb 22 Javascript
JavaScript事件详细讲解
Jun 27 #Javascript
JS原型链怎么理解
Jun 27 #Javascript
js选择器全面解析
Jun 27 #Javascript
通过javascript进行UTF-8编码的实现方法
Jun 27 #Javascript
jQuery实现每隔几条元素增加1条线的方法
Jun 27 #Javascript
jQuery实现查找链接文字替换属性的方法
Jun 27 #Javascript
全面了解javascript三元运算符
Jun 27 #Javascript
You might like
盘点被央视点名过的日本动画电影 一部比一部强
2020/03/08 日漫
PHP中for循环语句的几种变型
2007/03/16 PHP
phpmyadmin 常用选项设置详解版
2010/03/07 PHP
PHP实现的浏览器检查类
2016/04/11 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
Yii框架页面渲染操作实例详解
2019/07/19 PHP
php5对象复制、clone、浅复制与深复制实例详解
2019/08/14 PHP
tp5.1 框架路由操作-URL生成实例分析
2020/05/26 PHP
innerHTML 和 getElementsByName 在IE下面的bug 的解决
2010/04/09 Javascript
Js获取事件对象代码
2010/08/05 Javascript
javascipt:filter过滤介绍及使用
2014/09/10 Javascript
jQuery使用之标记元素属性用法实例
2015/01/19 Javascript
基于jquery实现在线选座订座之影院篇
2015/08/24 Javascript
AngularJS中指令的四种基本形式实例分析
2016/11/22 Javascript
详解如何在项目中使用jest测试react native组件
2018/02/09 Javascript
Angular 向组件传递模板的两种方法
2018/02/23 Javascript
快速搭建vue2.0+boostrap项目的方法
2018/04/09 Javascript
vue和webpack安装命令详解
2018/06/15 Javascript
vue实现pdf文档在线预览功能
2019/11/26 Javascript
Python使用新浪微博API发送微博的例子
2014/04/10 Python
使用python对文件中的数值进行累加的实例
2018/11/28 Python
Python实现八皇后问题示例代码
2018/12/09 Python
Python生成器的使用方法和示例代码
2019/03/04 Python
Python 在OpenCV里实现仿射变换—坐标变换效果
2019/08/30 Python
基于Python数据分析之pandas统计分析
2020/03/03 Python
解决python运行效率不高的问题
2020/07/20 Python
Python+OpenCV检测灯光亮点的实现方法
2020/11/02 Python
英国领先的新鲜松露和最好的松露产品供应商:TruffleHunter
2019/08/26 全球购物
JSF如何进行表格处理及取值
2012/08/06 面试题
国贸专业的职业规划范文
2014/01/23 职场文书
大学生活动总结模板
2014/07/02 职场文书
安全生产一岗双责责任书
2014/07/28 职场文书
群众路线剖析材料(四风问题)
2014/10/08 职场文书
小学教师个人工作总结2015
2015/04/20 职场文书
Python机器学习之基于Pytorch实现猫狗分类
2021/06/08 Python
深入理解go slice结构
2021/09/15 Golang