原生JavaScript实现异步多文件上传


Posted in Javascript onDecember 02, 2015

这是在上篇的修改版本。后台代码不变就可以接着使用,但是脚本不再使用jQuery了,改为原生的JavaScript 代码,所以我们主要看JS代码。

先介绍一下技术参数:

页面技术:HTML5

后台技术:Servlet 3.0

服务器:Tomcat 7.0

脚本:JavaScript

HTML5 file组件的新属性

accept : 如果在file组件中增加这个属性就可以直接控制上传的文件类型了,实在是很方便。

multiple:是否允许选择多个文件
HTML5 页面代码修改后

<img width="400" height="250"/><br />
<input type="file" id="pic" name="pic" onchange="printFileInfo()" accept="image/*" multiple="multiple"/>
<input type="button" value="上传图片" onclick="uploadFile()" /><br />
<div id="parent">
<div id="son"></div>
</div>

accept 的值可以参阅:IANA MIME 类型(标准 MIME 类型的完整列表),如果使用的是DW开发的话,软件本身就有提示。

如果选择了多个文件,可以用JS做循环打印,看看文件的名称,类型和大小,看演示代码

function printFileInfo(){
 
 var picFile = document.getElementById("pic"); 
 var files = picFile.files;
 for(var i=0; i<files.length; i++){
  var file = files[i];
  var div = document.createElement("div")
  div.innerHTML = "第("+ (i+1) +") 个文件的名字:"+ file.name +
  " , 文件类型:"+ file.type +" , 文件大小:"+ file.size 
  document.body.appendChild( div)
 }
}

既然可以循环多文件的话,就可以尝试多文件上传了。

1、首先创建 XMLHttpRequest 对象

//这是全局变量。因为是示例,所以就没有判断浏览器类型,低版本IE这么写的话会出问题的
var xhr = new XMLHttpRequest()
2、上篇介绍了进度事件(Progress) , 这次实现 progress 和 error 2个事件

error:在请求发生错误时触发。

 对应上传时发生错误导致的上传失败:uploadFailed()

//上传失败
function uploadFailed(evt) {
 alert("上传失败");
}
progress:在接收相应期间持续不断触发。




对应上传进度方法:onprogress()
/**
 * 侦查附件上传情况 ,这个方法大概0.05-0.1秒执行一次
 */
function onprogress(evt){
 var loaded = evt.loaded;       //已经上传大小情况 
 var tot = evt.total;       //附件总大小 
 var per = Math.floor(100*loaded/tot);   //已经上传的百分比 
  $("#son").html( per +"%" );
 $("#son").css("width" , per +"%");
}

最后就是上传方法了,注意上面的html代码中上传用的方法也需要改成这个uploadFile()方法才能正常使用。

//上传文件
function uploadFile() {
//将上传的多个文件放入formData中
 var picFileList = $("#pic").get(0).files;
 var formData = new FormData();
 for(var i=0; i< picFileList.length; i++){
  formData.append("file" , picFileList[i] );
 }

 //监听事件
 xhr.upload.addEventListener("progress", onprogress, false);
 xhr.addEventListener("error", uploadFailed, false);//发送文件和表单自定义参数
 xhr.open("POST", "upload");
 //记得加入上传数据formData

 xhr.send(formData);
}

PS: 这毕竟只是基本功能的演示示例,离公司使用的要求还相差十万八千里,请谨慎在公司平台使用。

大家可以结合这篇文章进行学习:基于HTML5 Ajax文件上传进度条如何实现(jquery版本)

以上就是本文的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
phpwind放自动注册方法
Dec 02 Javascript
Javascript面象对象成员、共享成员变量实验
Nov 19 Javascript
在多个页面使用同一个HTML片段的代码
Mar 04 Javascript
js中eval详解
Mar 30 Javascript
基于jQuery实现仿百度首页选项卡切换效果
May 29 Javascript
jQuery插件 Jqplot图表实例
Jun 18 Javascript
详解Angular2响应式表单
Jun 14 Javascript
用vue的双向绑定简单实现一个todo-list的示例代码
Aug 03 Javascript
js HTML5 canvas绘制图片的方法
Sep 08 Javascript
工作中常用到的ES6语法
Sep 04 Javascript
深入浅出了解Node.js Streams
May 27 Javascript
Vue深入理解插槽slot的使用
Aug 05 Vue.js
Jquery 1.9.1源码分析系列(十二)之筛选操作
Dec 02 #Javascript
日常收藏的jquery技巧
Dec 02 #Javascript
JavaScript使用DeviceOne开发实战(三)仿微信应用
Dec 02 #Javascript
jquery密码强度校验
Dec 02 #Javascript
基于jQuery实现的双11天猫拆红包抽奖效果
Dec 01 #Javascript
jquery实现全选、反选、获得所有选中的checkbox
Sep 13 #Javascript
js实现继承的5种方式
Dec 01 #Javascript
You might like
全国FM电台频率大全 - 26 西藏自治区
2020/03/11 无线电
上海地方志办公室-上海电子仪表工业志
2021/03/04 无线电
第十二节--类的自动加载
2006/11/16 PHP
PHP容易被忽略而出错陷阱 数字与字符串比较
2011/11/10 PHP
标准PHP的AES加密算法类
2015/03/12 PHP
PHP实现的随机红包算法示例
2017/08/14 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
2018/10/23 PHP
分析 JavaScript 中令人困惑的变量赋值
2007/08/13 Javascript
基于jquery的图片的切换(以数字的形式)
2011/02/14 Javascript
Dom 学习总结以及实例的使用介绍
2013/04/24 Javascript
对于Form表单reset方法的新认识
2014/03/05 Javascript
HTML页面弹出居中可拖拽的自定义窗口层
2014/05/07 Javascript
javascript中expression的用法整理
2014/05/13 Javascript
HTML页面登录时的JS验证方法
2014/05/28 Javascript
详细分析JavaScript函数定义
2015/07/16 Javascript
Bootstrap开发实战之响应式轮播图
2016/06/02 Javascript
老生常谈原生JS执行环境与作用域
2016/11/22 Javascript
浅谈$_FILES数组为空的原因
2017/02/16 Javascript
Omi v1.0.2发布正式支持传递javascript表达式
2017/03/21 Javascript
MvcPager分页控件 适用于Bootstrap
2017/06/03 Javascript
create-react-app修改为多页面支持的方法
2018/05/17 Javascript
Python网络爬虫出现乱码问题的解决方法
2017/01/05 Python
python如何读写json数据
2018/03/21 Python
python实现ID3决策树算法
2018/08/29 Python
Face++ API实现手势识别系统设计
2018/11/21 Python
Python设计模式之外观模式实例详解
2019/01/17 Python
利用Python实现字幕挂载(把字幕文件与视频合并)思路详解
2020/10/21 Python
10分钟入门CSS3 Animation
2018/12/25 HTML / CSS
幼儿园教师自我鉴定
2014/03/20 职场文书
就业导师推荐信范文
2015/03/27 职场文书
2015年保育员个人工作总结
2015/05/13 职场文书
2015年预防青少年违法犯罪工作总结
2015/05/22 职场文书
小学教师读书笔记
2015/07/01 职场文书
外出培训学习心得体会
2016/01/18 职场文书
如何使用vue3打造一个物料库
2021/05/08 Vue.js
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js