<form id="uploadForm" method="post" enctype="multipart/form-data">
<input type="file" id="uploadfiles" name="file" multiple="multiple" style="display:none" accept="aplication/zip">
</form> <!-- 导入文件滚动条窗口 -->
<div class="modal fade" id="progressbar" tabindex="-1" role="dialog" aria-labelledby="" aria-hidden="true" data-backdrop="false" data-keyboard="false">
<div class="modal-dialog modal-dialog-centered ">
<div class="modal-content" style="padding-top:10px;">
<div class="modal-body" style="color:black;">
上传进度:<progress style="width:30em;"></progress>
<p id="info" style="margin-top:10px"></p> </div> </div>
</div>
</div>
<div class="btn-group">
<a class="btn btn-primary dropdown-text" authorize="yes" onclick="$('#uploadfiles').click()" id="Import" title="可以选择多个文件同时上传"><i class="fa fa-plus"></i>批量上传</a>
</div>

 

js

 var totalSize = 0;
//绑定所有type=file的元素的onchange事件的处理函数
$('#uploadfiles').change(function eventStart() {
var fileQty = this.files.length;
if (fileQty == 0) {
return;
}
else {
var unvalidFiles = [];
$(this.files).each(
function (index, file) {
var filename = file.name;
//type = file.type; ini文件获取扩展名为空
var extIndex = filename.lastIndexOf(".");
var ext = filename.substring(extIndex + 1);//扩缀名
if (ext != 'zip') {
unvalidFiles.push(filename);
}
var size = file.size;
totalSize += size;
});
if (unvalidFiles.length > 0) {
$('#uploadfiles').val("");
$.modalAlert('存在非zip文件,请重新选择', 'error');
return;
}
else {
$("#info").html("已上传/总大小: " + '0KB/' + Math.ceil(totalSize / 1000) + "KB");
$("#progressbar").modal(); doUpload("/NGS/Report/Upload");
} } }); //上传文件
function doUpload(url) {
//创建FormData对象,初始化为form表单中的数据。需要添加其他数据可使用formData.append("property", "value");
var formData = new FormData($('form')[0]);
//formData.append("DataType", DataType);
//ajax异步上传
$.ajax({
url: url,//"/NGS/Report/Upload",
type: "POST",
cache: false,
data: formData,
dataType: 'json',
contentType: false, //必须false才会自动加上正确的Content-Type
processData: false, //必须false才会避开jQuery对 formdata 的默认处理
xhr: function () { //获取ajaxSettings中的xhr对象,为它的upload属性绑定progress事件的处理函数
myXhr = $.ajaxSettings.xhr();
if (myXhr.upload) { //检查upload属性是否存在
//绑定progress事件的回调函数
myXhr.upload.addEventListener('progress', progressHandlingFunction, false);
}
return myXhr; //xhr对象返回给jQuery使用
},
success: function (result, status, xhr) {
$("#progressbar").hide();
$('#uploadfiles').val("");
$("#progressbar").modal('hide');
if (result.state == "error") {
console.log(result1);
var err = '<textarea style="width:430px;height:294px;outline:none;resize:none;">有部分文件导入失败,请检查原因:\r\n';
$.each(result.data, function (index, item) { // err += index + 1 + '、文件名:' + item.file + ' 错误:' + item.error + '\r\n';
err += index + 1 + '、文件名:' + item + '\r\n'; }); content = err + '</textarea>';
top.layer.alert(content, {
icon: 'fa-times-circle',
title: "系统提示",
area: ['550px', '450px'],
btn: ['确认'],
btnclass: ['btn btn-primary']
});
}
else {
$.currentWindow().$("#gridList").trigger("reloadGrid");
$.modalMsg('上传文件成功', 'success');
$('#loadingPage', parent.document).css("display", "none");
} },
error: function (XMLHttpRequest, textStatus, error) {
$('#uploadfiles').val("");
$("#progressbar").modal('hide');
$.modalMsg(error, 'error');//报错:
},
});
} //上传进度回调函数:
function progressHandlingFunction(e) {
total = Math.ceil(e.total / 1000);
if (e.lengthComputable) {
loaded = Math.ceil(e.loaded / 1000);
$('progress').attr({ value: loaded, max: total }); //更新数据到进度条
var percent = loaded / total * 100;
$('#info').html(loaded + "/" + total + " KB " + "<span>" + percent.toFixed(2)+"</span>" + "%");
}
var infoV = $("#info span").html();
if (infoV == 100.00) {
$("#progressbar").hide();
$('#loadingPage', parent.document).css("display", "block");
$('#loadingPage .loading-content', parent.document).html("数据处理中,请稍后…"); } }

ajax 上传文件,显示进度条,进度条100%,进度条隐藏,出现卡顿就隐藏进度条,显示正在加载,再显示上传完成的更多相关文章

  1. js 利用 ajax 加载 js ,显示加载进度 ,严格按照js的顺序先后加载到页面

    js 利用 ajax 加载 js ,显示加载进度 ,严格按照js的顺序先后加载到页面 , 做手机端开发时,发现一个问题,有些浏览器,在网速比较慢的情况下,js文件没有加载完,后续的调用已经开始调用了, ...

  2. ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪

    ASP.NET MVC深入浅出(被替换)   一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态 ...

  3. 如何在启用SharePoint浏览器功能的InfoPath 表单中添加托管代码以动态地加载并显示图片

    InfoPath 的浏览器表单不支持加载并显示图片,当然在模板中可以插入图片,但是如果想显示数据库的一幅图片,或是动态加载一张图片就无能为力了. 基实这个问题可以通过在浏览器表单中使用: " ...

  4. EF如何操作内存中的数据以及加载相关联表的数据:延迟加载、贪婪加载、显示加载

    之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需要用的,这个系列讲讲如何使用EF操作数据库.老版本的EF主要是通过Ob ...

  5. EF如何操作内存中的数据和加载外键数据:延迟加载、贪婪加载、显示加载

    EF如何操作内存中的数据和加载外键数据:延迟加载.贪婪加载.显示加载 之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需 ...

  6. lufylegend:图片的加载和显示

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8" /> <script ...

  7. 从代码分析Android-Universal-Image-Loader的图片加载、显示流程

    从UNIVERSAL IMAGE LOADER. PART 3(四个DisplayImage重载方法详解)中,我们学习了Android-Universal-Image-Loader(以下简称UIL)中 ...

  8. 【jquery】 在异步加载的元素上绑定事件

    最近因为工作关系又重新回归到了jquery的怀抱,发现很多jquery的一些细节处理的部分都忘记了.这里记录一下最近在做项目时频繁遇到的一个问题:给异步加载的元素添加事件绑定. 问题发生的前提是项目前 ...

  9. Angular 使用 frame 加载网络资源显示路径不安全问题

    Angular 使用 frame 加载网络资源显示路径不安全问题 做项目的时候,angular 使用 frame 加载网络pdf文件的时候出现 unsafe value 问题,路径不安全.解决办法. ...

  10. Android加载手机磁盘上的资源---decodeFile方法的使用

    一般在写Android程序时,通常会将图片资源放在/res/drawable/文件夹下,读取时,通过R.drawable.imageId即可读取图片内容,但用户在使用时,一般会想要读取存放在存储卡上的 ...

随机推荐

  1. Java知多少(65)线程的挂起、恢复和终止

    有时,线程的挂起是很有用的.例如,一个独立的线程可以用来显示当日的时间.如果用户不希望用时钟,线程被挂起.在任何情形下,挂起线程是很简单的,一旦挂起,重新启动线程也是一件简单的事. 挂起,终止和恢复线 ...

  2. EventBus vs Otto vs Guava--自定义消息总线

    同步发表于http://avenwu.net/ioc/2015/01/29/custom_eventbus Fork on github https://github.com/avenwu/suppo ...

  3. Oracle11.2.0.4 RAC GI ORA-15003: diskgroup "XXXX" already mounted in another lock name space

    最新文章:Virson‘s Blog 安装GI,在执行root.sh时报错: Disk Group CRSDG creation failed with the following message: ...

  4. 《FPGA全程进阶---实战演练》第七章 让按键恢复平静

    1基础理论部分 A:“怎么按键按下去之后,结果不正常?”,B:“按键你消抖了吗?”A:“消什么抖,还要消抖?”,  B:“先检测按键变化,然后消抖过滤波动信号,最后输出稳定信号”,A:“我好像漏掉了什 ...

  5. java-信息安全(十一)-非对称加密算法ECC

    概述 信息安全基本概念: ECC算法(Elliptic curve cryptography,椭圆曲线密码学) ECC 椭圆加密算法(ECC)是一种公钥加密体制,最初由Koblitz和Miller两人 ...

  6. SFTP编辑linux文件 ——mac sublime text2 sftp

    llinux上编辑文件总是个头疼的事儿.mac上没有nodepad++和editplus,他们都有各自支持的sftp插件,editplus比较好 自然就带了,而notepad++需要另行安装. 下面介 ...

  7. session一直报错Session store not set on request

    Route::group(['middleware' => ['web']], function () { //});仍然报错,看了 session是使用默认file,没问题:app/stora ...

  8. lua迭代器和泛型for浅析

    (一) 首要概念要理清: 1. 在lua中,函数是一种"第一类值",他们具有特定的词法域."第一类值"表示在lua中函数与其他传统类型的值(例如数字和字符串)具 ...

  9. css3整理--transition

    transition语法: transition : [<'transition-property'> || <'transition-duration'> || <'t ...

  10. 第9天 py就业班基础02.01-02

    明天该看就业班的02    03字串符 2018-4-21 10:47:34 数据类型  py自动给数据分类型 2018-4-21 10:55:05 input使用 定义一个变量 然后input输给变 ...