基于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 组件之旅(三):用 Ant 构建组件
Oct 28 Javascript
js时间日期和毫秒的相互转换
Feb 22 Javascript
关于JavaScript中string 的replace
Apr 12 Javascript
jQuery中:disabled选择器用法实例
Jan 04 Javascript
jquery实现图片随机排列的方法
May 04 Javascript
javascript中attachEvent用法实例分析
May 14 Javascript
基于javascript实现随机颜色变化效果
Jan 14 Javascript
jQuery EasyUI学习教程之datagrid点击列表头排序
Jul 09 Javascript
Electron autoUpdater实现Windows安装包自动更新的方法
Dec 24 Javascript
JS常用排序方法实例代码解析
Mar 03 Javascript
微信小程序实现抖音播放效果的实例代码
Apr 11 Javascript
AJAX引擎原理以及XmlHttpRequest对象的axios、fetch区别详解
Apr 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
生成静态页面的PHP类
2006/11/25 PHP
解析PHP提交后跳转
2013/06/23 PHP
解析php常用image图像函数集
2013/06/24 PHP
ThinkPHP中自定义错误页面和提示页面实例
2014/11/22 PHP
filemanage功能中用到的lib.js
2007/04/08 Javascript
阻止JavaScript事件冒泡传递(cancelBubble 、stopPropagation)
2007/05/08 Javascript
setTimeout自动触发一个js的方法
2014/01/15 Javascript
js判断登录与否并确定跳转页面的方法
2015/01/30 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
2016/10/11 Javascript
巧用数组制作图片切换js代码
2016/11/29 Javascript
Bootstrap禁用响应式布局的实现方法
2017/03/09 Javascript
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
2017/09/18 Javascript
使用typescript开发angular模块并发布npm包
2018/04/19 Javascript
VUE 配置vue-devtools调试工具及安装方法
2018/09/30 Javascript
JS执行控制之节流模式实例分析
2018/12/21 Javascript
vue中axios实现数据交互与跨域问题
2019/05/12 Javascript
countUp.js实现数字动态变化效果
2019/10/17 Javascript
python利用elaphe制作二维条形码实现代码
2012/05/25 Python
web.py中调用文件夹内模板的方法
2014/08/26 Python
纯Python开发的nosql数据库CodernityDB介绍和使用实例
2014/10/23 Python
分析python请求数据
2018/08/19 Python
python使用numpy读取、保存txt数据的实例
2018/10/14 Python
pip安装tensorflow的坑的解决
2020/04/19 Python
Keras:Unet网络实现多类语义分割方式
2020/06/11 Python
浅谈matplotlib 绘制梯度下降求解过程
2020/07/12 Python
TUMI澳大利亚网站:美国旅行箱包品牌
2017/03/27 全球购物
main 函数执行以前,还会执行什么代码
2013/04/17 面试题
办公室人员先进事迹
2014/01/27 职场文书
2014年司法所工作总结
2014/11/22 职场文书
销售业务员岗位职责
2015/02/13 职场文书
背起爸爸上学观后感
2015/06/08 职场文书
2016全国“质量月”活动标语口号
2015/12/26 职场文书
安全生产协议书
2016/03/22 职场文书
廉洁自律承诺书2016
2016/03/25 职场文书
剑指Offer之Java算法习题精讲二叉树专项训练
2022/03/21 Java/Android
mysql数据插入覆盖和时间戳的问题及解决
2022/03/25 MySQL