HTML5——摒弃插件和前端框架的异步文件上传
之前我从来没有体会到HTML5的便利,直到这次需要一个异步上传的功能功能。一开始我以为文件的一些声明必须为HTML5才管用,后来才知道添加了很多以前没有的标签,并可以直接播放视频,音频等。可以不再使用Flash插件实现动画。然并卵,觉得这些东西跟平时用到的有什么关系,因为我从来不需要在网页中嵌入什么视频,音频甚至是动画。这也是对我来说HTML5跟之前的版本没有太大区别的一个原因。
HTML5本质上还是HTML语言,简单易用,只是增加了标签(我是这么认为),这个对浏览器厂商的要求,即使再加几个标签叫HTML10跟开发Web应用程序的关系不大,因为最重要的是浏览器的支持。
在实际中,我要做的是一个邮件群发的功能,其中邮件账号是上传csv文件,因为主要是演示一下html5的异步上传,所以我将业务需求简化为上传csv文件,文件的每行只有一个邮箱账号,读取文件的内容,判断是否为邮箱,为邮箱返回成功,否则返回邮件格式不对。并没有加入信息存入数据库或服务器等代码。以往的html ajax实现不了异步上传,需要加入jquery等异步上传的插件或者使用一些前端框架。演示的代码的前端使用HTML5,后端使用的是Spring MVC框架,实现的一个简易的异步文件上传功能。
后端代码简单没有什么可说的,先看下后端代码:

诚如所见,如果为非邮箱格式返回 “error” , 格式正确返回 “success”
前端 js 代码如下:
function upLoad(){
// 获取文件对象
var fileObj = document.getElementById("myfile").files[];
// 接收上传文件的后台地址
var url= "${ctx}/emailMass/emailMass.do";
// FormData 对象
var form = new FormData();
form.append("myfile", fileObj);
form.append("emailAccount", $("#emailAccount").val());
// XMLHttpRequest 对象
var xhr = new XMLHttpRequest();
xhr.open("post", url, true);
xhr.onload = function () {
if(xhr.responseText=="success"){
alert("群发消息成功");
}
if(xhr.responseText=="error"){
alert("邮箱格式有误,请检查");
}
};
xhr.send(form);
}
注意:1 xhr.onload 回调函数并没有参数,不能像普通的ajax 回调函数中 有一个 data 参数,如function (data){},这个data的值即返回值,
XMLHTTPRequest对象是通过 responseText获得返回值得。
2 后端程序的返回值如果为中文,会存在乱码,这两点都是在使用ajax 时候不会遇到的。
3 ie8不支持FormData这个对象,如果是一个后台的管理系统一般不必考虑浏览器兼容问题,若是前台供客户使用的系统要考虑到浏览器是否支持慎用此方法。
现在即使开发前台系统也不会再兼容ie6了,还用ie6的用户是抛弃了时代,这样的用户我们也抛弃他(最头痛的就是兼容问题,以前我们常这么打趣的说),希望那一天也抛弃ie8,我相信不会远(偷笑)
前端的js除了返回值如果是中文乱码我没有解决(所以我返回英文,然后翻译成中文),如果表单元素太多,通过FormData对象的append方法一个一个添加,也是件麻烦事
使用HTML5的上传是不是很简洁?
作为对比,可以看看其他异步上传的方法
如果使用的是 ajaxfileupload ,首先你需要引入js <script src="../js/ajaxfileupload.js"></script>
前台代码如下:
$(function(){
//选择文件之后执行上传
$('#fileToUpload').on('change', function() {
$.ajaxFileUpload({
url:'/emailMass/emailMass.do',
fileElementId:'myfile',//file标签的id
dataType: 'json',//返回数据的类型
data:{emailAccount:$("#emailAccount").val()},//一同上传的数据
success: function (data, status) {
if(data=="success"){
alert("群发消息成功");
}
if(data=="error"){
alert("邮箱格式有误,请检查");
}
},
error: function (data, status, e) {
alert(e);
}
});
});
});
似乎使用别的方式也并不复杂,只需要引入其他js即可,确实如此,但是引入的js 要跟jquery 版本适应,不然很容易出现冲突,从而前台js报错,无法执行。
Html5也是得显示进度便得简单,只需在原有的上传函数中加入如下代码:
xhr.upload.onprogress = function (ev) {
var percent = ;
if(ev.lengthComputable) {
percent = * ev.loaded/ev.total;
document.getElementById('bar').style.width = percent + '%';
}
}
其中“bar”是进度条的id,你并不需要关心 ev.loaded 和 ev.total ,ev对象中浏览器已经做好了一切,总共有多少数据,上传了多少等内容
为了看得更清楚,进度条的静态html如下:
<html>
<head>
<style>
#progress{
border: 1px solid blue;
width:500px;
height:20px;
}
#bar {
background:green;
height:20px;
width:%;
}
</style>
</head>
<div id="progress"><div id="bar"></div></div>
</html>
其实进度条就是不断改变 “bar”层的宽度,bar层的背景是绿色的,随着上传进度的增加,宽度的百分比不断增加,当完成时,绿色条框也就达到100%
HTML5——摒弃插件和前端框架的异步文件上传的更多相关文章
- 前端异步文件上传组件 Uploader
Uploader是非常强大的异步文件上传组件,支持ajax.iframe.flash三套方案,实现浏览器的全兼容,调用非常简单,内置多套主题支持 和常用插件,比如验证.图片预览.进度条等,广泛应用于淘 ...
- 异步文件上传组件 Uploader
Uploader是非常强大的异步文件上传组件,支持ajax.iframe.flash三套方案,实现浏览器的全兼容,调用非常简单,内置多套主题支持 和常用插件,比如验证.图片预览.进度条等,广泛应用于淘 ...
- Struts2框架下的文件上传文件类型、名称约定
Struts2框架下的文件上传机制:1.通过multipart/form-data form提交文件到服务器2.文件名是通过什么地方设置的?在strust2的FileUploadInterceptor ...
- ajax异步文件上传和进度条
一.ajax异步文件上传 之前有说过在form表单内的文件上传,但是会刷新页面,下面就来实现不刷新页面的异步文件上传 <div class="uploding_div"> ...
- jquery插件课程2 放大镜、多文件上传和在线编辑器插件如何使用
jquery插件课程2 放大镜.多文件上传和在线编辑器插件如何使用 一.总结 一句话总结:插件使用真的还是比较简单的,引包,初始化,配置参数(json),配置数据(json),而后两步不是必须的.而且 ...
- PHP 多图上传,图片批量上传插件,webuploader.js,百度文件上传插件
PHP 多图上传,图片批量上传插件,webuploader.js,百度文件上传插件(案例教程) WebUploader作用:http://fex.baidu.com/webuploader/gett ...
- JQUERY插件JqueryAjaxFileUplaoder----更简单的异步文件上传
异步上传相信大家都做过类似的功能,JqueryAjaxFileUploader为我们提供了更简单的实现和使用方式.不过既然是JQUERY的插件那么它所依赖的环境大家都懂得.JqueryAjaxFile ...
- 摒弃FORM表单上传图片,异步批量上传照片
之前作图像处理一直在用form表单做图片数据传输, 个人感觉low到爆炸而且用户体验极差,现在介绍一个一部批量上传图片的小技巧,忘帮助他人的同时也警醒自己在代码的编写时不要只顾着方便,也要考虑代码的健 ...
- Bottle + WebUploader 修改Bottle框架从而大文件上传实现方案
Bottle 是个轻量级的Web框架,小巧又强大,真不愧是个轻量级的框架.可扩展性非常好,可以扩展很多功能,但是有些功能就不得不自己动手修改了. Bottle:http://www.bottlepy. ...
随机推荐
- JSP工作原理
一.历史 JSP是Servlet的扩展,JSP没出现之前,就已经出现了Servlet技术.Servlet是利用了"输出流",动态的生成了HTML页面.包括 每一个HTML标签和所有 ...
- C# 数组、多维数组(矩形数组)、锯齿数组(交叉数组)
数组是变量的索引列表,可以在方括号中指定索引来访问数组中的各个成员,其中索引是一个整数,从0开始. 一维数组 多维数组(矩形数组) 数组的数组(锯齿数组) 数组必须在访问之前初始化,数组的初始化有两种 ...
- SqlServer coalesce函数
SqlServer数据库中coalesce函数用法:在SqlServer2005中有了新的函数,它非常的实用,它就是coalesce函数,此函数可以返回参数中的第一个非空表达式,当你要在N个字段中选取 ...
- hdu 5442 (ACM-ICPC2015长春网络赛F题)
题意:给出一个字符串,长度是2*10^4.将它首尾相接形成环,并在环上找一个起始点顺时针或逆时针走一圈,求字典序最大的走法,如果有多个答案则找起始点最小的,若起始点也相同则选择顺时针. 分析:后缀数组 ...
- 解读Unity中的CG编写Shader系列八(多光源漫反射)
转自http://www.itnose.net/detail/6117338.html 前文中完成最简单的漫反射shader只是单个光源下的漫反射,而往往场景中不仅仅只有一个光源,那么多个光源的情况下 ...
- ACM/ICPC 之 数论-费马大定理(HNUOJ 13371)
好歹我是数学专业的学生,还是要写写训练的时候遇到的数学问题滴~~ 在ACM集训的时候在各高校OJ上也遇见过挺多的数学问题,例如大数的处理,素数的各种算法,几何问题,函数问题(单调,周期等性质),甚至是 ...
- Django~automated tests
def xx(): 冒号下一行要缩进 ATD http://blog.csdn.net/doupei2006/article/details/7657547 http://www.jb51.net/a ...
- 关于C语言中的转义字符
1.转义字符的分类 1. 1一般转义字符 这种转义字符,虽然在形式上由两个字符组成,但只代表一个字符.常用的一般转义字符为: \a \n \t \v \b \r ...
- hdu 1556.Color the ball 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556 题目意思:有 n 个气球从左到右排成一排,编号依次为1,2,3,...,n.给出 n 对 a, ...
- windows编程中关于“关闭窗口无法退出进程”的解决方法
一般会出现如下两种情况 1.WinMain函数中,最后阶段接收消息队列循环中,调用的GetMessage函数参数提供错误 如: while (GetMessage(&msg,hwnd, 0, ...