js实现的文件上传进度条兼容ie789
在express4,req.files已经定义。现在最有可能的用途是令人生畏。你知道它有一个进度事件,所以心脏是快乐的,进步版本的低版本IE正在玩,好,试试看:
形式
对错误的功能。((ERR){
console.log(ERR);
})
,('aborted,函数(){(){
console.log('aborted);
})
,(进步,功能(bytesreceived,bytesexpected){
var = parseInt(parseFloat(bytesreceived / bytesexpected)。ToFixed(2)* 100);
console.log(N);
});
是的,你很高兴看到控制台像预期的那样打印出一系列的进展;然后,进一步;
形式
,(进步,功能(bytesreceived,bytesexpected){
var = parseInt(parseFloat(bytesreceived / bytesexpected)。ToFixed(2)* 100);
res.write(' ');
/ /无刷新上传,你知道console.log(N);
});
调用方法是显示页面上的进度;不幸的是,您只能看到最后100%个,不能看到上传的详细进度值。
接下来,改变一种思维方式,尝试将保存到会话中的值调度,向轮询表添加一个请求,哦,哦,好的!为了确保您的申请表是你上传这个计划的价值而不是其他的上传进度的价值,需要上传额外的请求的请求和同意的令牌值;现在另一个问题是如何在时间的请求得到的道理,因为在req.body在请求负载的上传请求,所以得到过去的价值观,我不想对这桩,当然,我也无法解释;把最好的URL,问题是有时候刷新两次刷新令牌,不好!不,我还把它放在饼干里。
var =函数(){
VaR CKS = req.headers.cookie.split(';'),obj = { };
对于(var i = 0;i < cks.length;i++){
obj { CKS {我}。分裂(= { 0 }。取代( / / S +搞笑),} = unescape(){ }中。分(T){ 1 });
}
返回对象;
(});
Var queryToken=cookies.__token__;
形式。在(进步,功能(bytesreceived,bytesexpected){
var = parseInt(parseFloat(形式。bytesreceived /形式。bytesexpected)。ToFixed(2)* 100);
如果(需求,会议文件+ querytoken { }){
要求。会议{文件+ querytoken }。% = N;
其他{ }
要求。会议{文件+ querytoken } = {
令牌:querytoken,
比:n
}
};
console.log(N);
});
对于ie789,我一直要求进步的价值。原谅我,但我的心很痛。
GetData函数(){ var =
美元。后( /上传,{
getfileinfo:1,
Uploadtoken:utils.cookie.getcookie('__token__)
})
然后(函数(数据){)
console.log(数据);
如果(数据< MES > 0){
GetData();
其他{ }
VaR的优点= data.info;
电话(赞成票,百分比);
如果(pros.percent!= 100){
GetData();
};
};
});
}
GetData();
调用方法是显示页面上的进度;不幸的是,您只能看到最后100%个,不能看到上传的详细进度值。
好吧,我一次又一次的跌倒;但还是觉得不妥,Ajax轮询是没有问题的,问题是,会议应该直到上传完毕,你只能看到100%,有价值的进步看不出来;如果我能想到,在进步,在这之前暂停现在res.write和req.session,但它也救了每个执行结果,直到进展发布结束,你只能看到100%;没有心情看强大的源代码,当然,我不知道为什么,我会这么想!
由于Ajax轮询是没问题的,然后保存到会话不得劲;它不是一个全球性的,试试吧,不塞一个全局对象的价值将被暂停;全球略有变化:
形式
,(进步,功能(bytesreceived,bytesexpected){
var = parseInt(parseFloat(形式。bytesreceived /形式。bytesexpected)。ToFixed(2)* 100);
如果(全球{文件+ querytoken }){
全球{文件+ querytoken }。% = N;
其他{ }
全球{文件+ querytoken } = {
令牌:querytoken,
比:n
}
};
console.log(N);
});
继续轮询。
漂亮,那正是它!看到在Chrome和HTML5进度的影响,只会有ie789卡Dayton的感觉,但是你可以看到详细的进度值;毕竟,你知道老浏览器的身子骨不好,;每一次上传全球插值,怎么会有合适的清洗一遍,文件已上传,转移到指定目录文件+ querytoken全球{ } = null;
然而,投票是一个很大的要求,这里可能是一个问题;或限制它,间隔500ms要求进步的价值;好的,ie789进度条解决,失去了闪光;虽然这个投票可以兼容所有浏览器,但毕竟浪费了那么多的要求,或判决,HTML5除了ie789!
事实上,添加额外的flash上传和额外的请求更有价值吗原谅我不知道闪光。我不想说太多。不管怎样,我不喜欢在页面上添加额外的文件。
总结
在文件上传组件,有很多细节要处理这个问题,想得到一个js文件,然后一个念头,为了重复使用,或作为一个单独的网页做的更好,需要上传,在线上的iframe,肯定比找了很多JS文件。以上是这篇文章的全部内容。我希望它能给大家的学习或工作带来一些帮助。如果有任何疑问,你可以留言。