基于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中实现块作用域的方法
Apr 01 Javascript
js图片延迟技术一般的思路与示例
Mar 20 Javascript
教你如何自定义百度分享插件以及bshare分享插件的分享按钮
Jun 20 Javascript
JQuery插件Quicksand实现超炫的动画洗牌效果
May 03 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
Sep 01 Javascript
AngularJS ng-repeat数组有重复值的解决方法
Oct 23 Javascript
Javascript 对cookie操作详解及实例
Dec 29 Javascript
详谈jQuery Ajax(load,post,get,ajax)的用法
Mar 02 Javascript
Vue实现PopupWindow组件详解
Apr 28 Javascript
vue中keep-alive的用法及问题描述
May 15 Javascript
JavaScript实现拖拽效果
Mar 16 Javascript
vue实现动态给id赋值,点击事件获取当前点击的元素的id操作
Nov 09 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
《魔兽世界》惊魂幻象将获得调整
2020/03/08 其他游戏
PHP开发中常用的8个小技巧
2008/08/27 PHP
ThinkPHP3.1新特性之内容解析输出详解
2014/06/19 PHP
PHP7之Mongodb API使用详解
2015/12/26 PHP
PHP页面跳转操作实例分析(header方法)
2016/09/28 PHP
万能的php分页类
2017/07/06 PHP
JS清除IE浏览器缓存的方法
2013/07/26 Javascript
JS与C#编码解码
2013/12/03 Javascript
了不起的node.js读书笔记之node.js中的特性
2014/12/22 Javascript
Javascript实现Web颜色值转换
2015/02/05 Javascript
jQuery选择器源码解读(五):tokenize的解析过程
2015/03/31 Javascript
Javascript中prototype属性实现给内置对象添加新的方法
2015/05/14 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
2016/10/12 Javascript
JavaScript制作弹出层效果
2016/12/02 Javascript
vue.js的安装方法
2017/05/12 Javascript
详解微信小程序审核不通过的解决方法
2018/01/17 Javascript
ES6 如何改变JS内置行为的代理与反射
2019/02/11 Javascript
python简单判断序列是否为空的方法
2015/06/30 Python
在MAC上搭建python数据分析开发环境
2016/01/26 Python
Python的Django中将文件上传至七牛云存储的代码分享
2016/06/03 Python
Python爬取附近餐馆信息代码示例
2017/12/09 Python
DataFrame中的object转换成float的方法
2018/04/10 Python
python 给DataFrame增加index行名和columns列名的实现方法
2018/06/08 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
python 实现得到当前时间偏移day天后的日期方法
2018/12/31 Python
python在新的图片窗口显示图片(图像)的方法
2019/07/11 Python
Python实现桌面翻译工具【新手必学】
2020/02/12 Python
python基于爬虫+django,打造个性化API接口
2021/01/21 Python
详解如何使用CSS3中的结构伪类选择器和伪元素选择器
2020/01/06 HTML / CSS
详解如何使用rem或viewport进行移动端适配
2020/08/14 HTML / CSS
美国在线工具商店:Acme Tools
2018/06/26 全球购物
Spongelle官网:美国的创意护肤洗护品牌
2019/05/15 全球购物
北京大学自荐信范文
2014/01/28 职场文书
微笑服务标语
2014/06/24 职场文书
委托培训协议书
2014/11/17 职场文书
后勤个人工作总结
2015/02/28 职场文书