原生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 相关文章推荐
javascript flash下fromCharCode和charCodeAt方法使用说明
Jan 12 Javascript
js 发个判断字符串是否为符合标准的函数
Apr 27 Javascript
js multiple全选与取消全选实现代码
Dec 04 Javascript
使用JS 清空File控件的路径值
Jul 08 Javascript
jquery ajax jsonp跨域调用实例代码
Dec 11 Javascript
node.js中的fs.mkdirSync方法使用说明
Dec 17 Javascript
简要了解jQuery移动web开发的响应式布局设计
Dec 04 Javascript
javascript设计模式Constructor(构造器)模式
Aug 19 Javascript
jquery Easyui Datagrid实现批量操作(编辑,删除,添加)
Feb 20 Javascript
angularjs下ng-repeat点击元素改变样式的实现方法
Sep 12 Javascript
vue输入节流,避免实时请求接口的实例代码
Oct 30 Javascript
vue 父组件通过$refs获取子组件的值和方法详解
Nov 07 Javascript
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
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
2018/10/15 PHP
js跨域问题之跨域iframe自适应大小实现代码
2010/07/17 Javascript
javascript操作excel生成报表全攻略
2014/05/04 Javascript
seaJs的模块定义和模块加载浅析
2014/06/06 Javascript
最简单的JavaScript验证整数、小数、实数、有效位小数正则表达式
2015/04/17 Javascript
jQuery实现鼠标滑过点击事件音效试听
2015/08/31 Javascript
JavaScript位移运算符(无符号) &gt;&gt;&gt; 三个大于号 的使用方法详解
2016/03/31 Javascript
微信小程序 密码输入(源码下载)
2017/06/27 Javascript
jQuery实现鼠标点击处心形漂浮的炫酷效果示例
2018/04/12 jQuery
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
原生javascript单例模式的应用实例分析
2020/02/23 Javascript
jquery实现上传文件进度条
2020/03/26 jQuery
webpack+express实现文件精确缓存的示例代码
2020/06/11 Javascript
利用python爬取软考试题之ip自动代理
2017/03/28 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
2018/04/05 Python
python的格式化输出(format,%)实例详解
2018/06/01 Python
Windows下安装Scrapy
2018/10/17 Python
Python里字典的基本用法(包括嵌套字典)
2019/02/27 Python
华为校园招聘上机笔试题 扑克牌大小(python)
2020/04/22 Python
使用Python来做一个屏幕录制工具的操作代码
2020/01/18 Python
史上最详细的Python打包成exe文件教程
2021/01/17 Python
css3 transform及原生js实现鼠标拖动3D立方体旋转
2016/06/20 HTML / CSS
HTML5新特性 多线程(Worker SharedWorker)
2017/04/24 HTML / CSS
html5通过postMessage进行跨域通信的方法
2017/12/04 HTML / CSS
详解HTML5 data-* 自定义属性
2018/01/24 HTML / CSS
美国和加拿大房车出售在线分类广告:RVT.com
2018/04/23 全球购物
华纳兄弟工作室的官方授权商店:WB Shop
2018/11/30 全球购物
商务英语专业自荐信
2013/10/14 职场文书
电气工程师岗位职责
2014/01/01 职场文书
学校安全工作制度
2014/01/19 职场文书
治超工作实施方案
2014/05/04 职场文书
主题实践活动总结
2014/05/08 职场文书
小学少先队活动总结
2015/05/08 职场文书
2016国庆节67周年红领巾广播稿
2015/12/18 职场文书
Java基础——Map集合
2022/04/01 Java/Android