基于javascript html5实现多文件上传


Posted in Javascript onMarch 03, 2016

本文实例为大家分享了javascript html5实现多文件上传的实现方法,具体内容如下

HTML结构:

<div class="container">
 <label>请选择一个图像文件:</label>
 <input type="file" id="file_input" multiple/>
</div>

顺便说下这个上传的主要逻辑:

  • 用input标签并选择type=file,记得带上multiple,不然就只能单选图片了
  • 绑定好input的change时间,
  • 重点就是如何处理这个change事件了,使用H5新的FileReader接口读取文件并打成base64编码,之后的事就是与后端同学交互着玩啦

JS代码:

window.onload = function(){
  var input = document.getElementById("file_input");
  var result,div;
 
  if(typeof FileReader==='undefined'){
   result.innerHTML = "抱歉,你的浏览器不支持 FileReader";
   input.setAttribute('disabled','disabled');
  }else{
   input.addEventListener('change',readFile,false);
  }<br>
 //handler
  function readFile(){
   for(var i=0;i<this.files.length;i++){
    if (!input['value'].match(/.jpg|.gif|.png|.bmp/i)){
//判断上传文件格式
     return alert("上传的图片格式不正确,请重新选择")<br>




}
    var reader = new FileReader();
    reader.readAsDataURL(this.files[i]);
    reader.onload = function(e){
     result = '<div id="result"><img src="'+this.result+'" alt=""/></div>';
     div = document.createElement('div');
     div.innerHTML = result;
     document.getElementById('body').appendChild(div); 
//插入dom树      <br>




}
   }
  }
 }

上传多张图片难道就这样实现了吗?

然而并没有,这样只是将图片转换成base64编码后再前端显示,一刷新什么都没有

插入图片后,打开开发者工具看html结构是这样的

 基于javascript html5实现多文件上传

现实的做法是,我们在处理函数里将文件队列里的文件发送到后端,后端同学呢返回文件对应的MD5加密过文件和路径给前端,前端就拿着这个路径渲染到页面上。

之后再把MD5文件传回给后端,因为上传完后前端一般有删除图片的操作,回传目的就是告诉后端确认那些图片是我们想要的,后端存入数据库里。

说下用jquery如何交互吧

function readFile(){
   var fd = new FormData();
   for(var i=0;i<this.files.length;i++){
    var reader = new FileReader();
    reader.readAsDataURL(this.files[i]);
    fd.append(i,this.files[i]);<br>


  }
    $.ajax({
     url : '',
     type : 'post',
     data : fd,
     success : function(data){
      console.log(data)
      } 
    })
}

FormData也是H5的新接口,用来模拟表单控件的提交,最大的好处呢就是可以提交二进制文件

然后success的回调里面我们拿回了想要的数据后呢,就可以将图片插进去页面啦,类似之前的做法~

上个效果图:

基于javascript html5实现多文件上传

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

Javascript 相关文章推荐
让JavaScript拥有类似Lambda表达式编程能力的方法
Sep 12 Javascript
基于JQuery 的消息提示框效果代码
Jul 31 Javascript
jquery入门—数据删除与隔行变色以及图片预览
Jan 07 Javascript
Javascript判断文件是否存在(客户端/服务器端)
Sep 16 Javascript
node.js中的querystring.unescape方法使用说明
Dec 10 Javascript
JS实现的论坛Ajax打分效果完整实例
Oct 31 Javascript
微信小程序 登录实例详解
Jan 16 Javascript
ES6中Array.copyWithin()函数的用法实例详解
Sep 16 Javascript
jquery实现自定义树形表格的方法【自定义树形结构table】
Jul 12 jQuery
VUE实现密码验证与提示功能
Oct 18 Javascript
vue双向绑定数据限制长度的方法
Nov 04 Javascript
Vue数据双向绑定原理实例解析
May 15 Javascript
编写高质量JavaScript代码的基本要点
Mar 02 #Javascript
JS获取当前脚本文件的绝对路径
Mar 02 #Javascript
Webpack 实现 AngularJS 的延迟加载
Mar 02 #Javascript
浅谈JS原型对象和原型链
Mar 02 #Javascript
jquery单击事件和双击事件冲突解决方案
Mar 02 #Javascript
jQuery实现只允许输入数字和小数点的方法
Mar 02 #Javascript
jQuery Mobile开发中日期插件Mobiscroll使用说明
Mar 02 #Javascript
You might like
在Windows中安装Apache2和PHP4的权威指南
2006/10/09 PHP
php实现mysql数据库备份类
2008/03/20 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
2016/10/12 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
2017/08/18 PHP
Mozilla中显示textarea中选择的文字
2006/09/07 Javascript
浅谈JavaScript中面向对象技术的模拟
2006/09/25 Javascript
IE中createElement需要注意的一个问题
2010/07/13 Javascript
解析jquery获取父窗口的元素
2013/06/26 Javascript
jquery中post方法用法实例
2014/10/21 Javascript
JavaScript 动态加载脚本和样式的方法
2015/04/13 Javascript
原生js仿jquery实现对Ajax的封装
2016/10/04 Javascript
jQuery remove()过滤被删除的元素(推荐)
2017/07/18 jQuery
vuex 的简单使用
2018/03/22 Javascript
微信小程序滑动选择器的实现代码
2018/08/10 Javascript
一文了解vue-router之hash模式和history模式
2019/05/31 Javascript
在Vue 中实现循环渲染多个相同echarts图表
2020/07/20 Javascript
详解Python的Django框架中的模版继承
2015/07/16 Python
python画折线图的程序
2018/07/26 Python
用python爬取租房网站信息的代码
2018/12/14 Python
python hough变换检测直线的实现方法
2019/07/12 Python
PyCharm无法引用自身项目解决方式
2020/02/12 Python
Python如何将字符串转换为日期
2020/07/31 Python
python热力图实现简单方法
2021/01/29 Python
大学生毕业自我评价范文分享
2013/11/07 职场文书
工作会议欢迎词
2014/01/16 职场文书
《在家里》教后反思
2014/03/01 职场文书
2014年入党积极分子党课学习心得体会模板
2014/04/03 职场文书
大学本科生职业生涯规划书范文
2014/09/14 职场文书
贵阳市党的群众路线教育实践活动党(工)委领导班子整改方案
2014/10/26 职场文书
小班上学期个人总结
2015/02/12 职场文书
小学运动会前导词
2015/07/20 职场文书
2015年城管执法工作总结
2015/07/23 职场文书
标准版个人借条怎么写?以及什么是借条?
2019/08/28 职场文书
只需要100行Python代码就可以实现的贪吃蛇小游戏
2021/05/27 Python
springboot使用Redis作缓存使用入门教程
2021/07/25 Redis
使用Python拟合函数曲线
2022/04/14 Python