之前我从来没有体会到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——摒弃插件和前端框架的异步文件上传的更多相关文章

  1. 前端异步文件上传组件 Uploader

    Uploader是非常强大的异步文件上传组件,支持ajax.iframe.flash三套方案,实现浏览器的全兼容,调用非常简单,内置多套主题支持 和常用插件,比如验证.图片预览.进度条等,广泛应用于淘 ...

  2. 异步文件上传组件 Uploader

    Uploader是非常强大的异步文件上传组件,支持ajax.iframe.flash三套方案,实现浏览器的全兼容,调用非常简单,内置多套主题支持 和常用插件,比如验证.图片预览.进度条等,广泛应用于淘 ...

  3. Struts2框架下的文件上传文件类型、名称约定

    Struts2框架下的文件上传机制:1.通过multipart/form-data form提交文件到服务器2.文件名是通过什么地方设置的?在strust2的FileUploadInterceptor ...

  4. ajax异步文件上传和进度条

    一.ajax异步文件上传 之前有说过在form表单内的文件上传,但是会刷新页面,下面就来实现不刷新页面的异步文件上传 <div class="uploding_div"> ...

  5. jquery插件课程2 放大镜、多文件上传和在线编辑器插件如何使用

    jquery插件课程2 放大镜.多文件上传和在线编辑器插件如何使用 一.总结 一句话总结:插件使用真的还是比较简单的,引包,初始化,配置参数(json),配置数据(json),而后两步不是必须的.而且 ...

  6. PHP 多图上传,图片批量上传插件,webuploader.js,百度文件上传插件

    PHP  多图上传,图片批量上传插件,webuploader.js,百度文件上传插件(案例教程) WebUploader作用:http://fex.baidu.com/webuploader/gett ...

  7. JQUERY插件JqueryAjaxFileUplaoder----更简单的异步文件上传

    异步上传相信大家都做过类似的功能,JqueryAjaxFileUploader为我们提供了更简单的实现和使用方式.不过既然是JQUERY的插件那么它所依赖的环境大家都懂得.JqueryAjaxFile ...

  8. 摒弃FORM表单上传图片,异步批量上传照片

    之前作图像处理一直在用form表单做图片数据传输, 个人感觉low到爆炸而且用户体验极差,现在介绍一个一部批量上传图片的小技巧,忘帮助他人的同时也警醒自己在代码的编写时不要只顾着方便,也要考虑代码的健 ...

  9. Bottle + WebUploader 修改Bottle框架从而大文件上传实现方案

    Bottle 是个轻量级的Web框架,小巧又强大,真不愧是个轻量级的框架.可扩展性非常好,可以扩展很多功能,但是有些功能就不得不自己动手修改了. Bottle:http://www.bottlepy. ...

随机推荐

  1. oracle数据库高级应用之《自动生成指定表的insert,update,delete语句》

    /* * 多条记录连接成一条 * tableName 表名 * type 类型:可以是insert/update/select之一 */ create or replace function my_c ...

  2. UESTC 250

    windy数 基本的数位DP,需要判断当前位是否为起始位. #include <cstdio> #include <cmath> #include <cstring> ...

  3. Unity3d《Shader篇》自定义光照模型

    一.理论 公式1:被光照的物体最终所呈现的颜色公式 最终颜色=材质颜色*发光颜色 公式2:材质颜色 tex2D(_MainTex,uv) 公式3:光照颜色 光照颜色=自发光+环境光+漫反射+镜面反射 ...

  4. java web 学习 --第三天(Java三级考试)

    第二天的学习内容这里:http://www.cnblogs.com/tobecrazy/p/3446646.html Jsp中的动作标签 <jsp:include> 实现动态包含,在一个文 ...

  5. winrt控件

    http://www.mindscapehq.com/products/metroelements 常见的翻书,相册,图表,时间组件 demo下载地址http://assets.mindscape.c ...

  6. 【leetcode】Single Number (Medium) ☆

    题目: Given an array of integers, every element appears twice except for one. Find that single one. No ...

  7. 【leetcode】LRU Cache(hard)★

    Design and implement a data structure for Least Recently Used (LRU) cache. It should support the fol ...

  8. 【XLL API 函数】 xlfSetName

    常常用于创建和删除与DLL定义的名称 原型 Excel12(xlfSetName, LPXLOPER12 pxRes, 2, LPXLOPER12 pxNameText, LPXLOPER12 pxN ...

  9. ios二维码生成

    二维码扫描现在已经有很多的库可以使用了,常用的有ZXing和ZBar.如果感兴趣的同学可以自行研究. libqrencode介绍:是一个用C语言编写的用来解析二维条形码(QR Code)的程序库,li ...

  10. 获取driver网络路径名称

    'get the web path of the drive s: Dim MM As New Management.ManagementObject(String.Format("win3 ...