基于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 相关文章推荐
解决bootstrap中modal遇到Esc键无法关闭页面
Mar 09 Javascript
AngularJS基础学习笔记之指令
May 10 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
Nov 24 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
May 28 Javascript
json对象与数组以及转换成js对象的简单实现方法
Jun 24 Javascript
bootstrapfileinput实现文件自动上传
Nov 08 Javascript
jQuery实现点击关注和取消功能
Jul 03 jQuery
详解VueRouter进阶之导航钩子和路由元信息
Sep 13 Javascript
了解javascript中的Dom操作
May 27 Javascript
JavaScript实现秒杀时钟倒计时
Sep 29 Javascript
vue webpack build资源相对路径的问题及解决方法
Jun 04 Javascript
Vue页面跳转传递参数及接收方式
Sep 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的加密方式及原理
2012/06/14 PHP
destoon利用Rewrite规则设置网站安全
2014/06/21 PHP
Yii2-GridView 中让关联字段带搜索和排序功能示例
2017/01/21 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
PHP封装的非对称加密RSA算法示例
2018/05/28 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
php获取手机端的号码以及ip地址实例代码
2018/09/12 PHP
JS多物体 任意值 链式 缓冲运动
2012/08/10 Javascript
Three.js源码阅读笔记(光照部分)
2012/12/27 Javascript
jQuery实现返回顶部效果的方法
2015/05/29 Javascript
jQuery Validate验证框架经典大全
2015/09/23 Javascript
用JS动态改变表单form里的action值属性的两种方法
2016/05/25 Javascript
JavaScript数组操作详解
2017/02/04 Javascript
canvas实现图像截取功能
2017/02/06 Javascript
js获取文件里面的所有文件名(实例)
2017/10/17 Javascript
Node.js中你不可不精的Stream(流)
2018/06/08 Javascript
vue 点击按钮实现动态挂载子组件的方法
2018/09/07 Javascript
详解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
2018/10/12 Javascript
React 路由懒加载的几种实现方案
2018/10/23 Javascript
浅谈vux之x-input使用以及源码解读
2018/11/04 Javascript
websocket4.0+typescript 实现热更新的方法
2019/08/14 Javascript
js键盘事件实现人物的行走
2020/01/17 Javascript
Vue 实现v-for循环的时候更改 class的样式名称
2020/07/17 Javascript
Vue-cli打包后如何本地查看的操作
2020/09/02 Javascript
Vue项目开发常见问题和解决方案总结
2020/09/11 Javascript
[42:04]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第一局
2016/03/03 DOTA
Python 正则表达式操作指南
2009/05/04 Python
django model的update时auto_now不被更新的原因及解决方式
2020/04/01 Python
Python操作MySQL数据库的示例代码
2020/07/13 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
2020/10/30 Python
仿CSDN Blog返回页面顶部功能实现原理及代码
2013/06/30 HTML / CSS
伦敦最著名的老字号百货公司:Selfridges(塞尔福里奇百货)
2016/07/25 全球购物
日本高岛屋百货购物网站:TAKASHIMAYA
2019/03/24 全球购物
什么是类的返射机制
2016/02/06 面试题
《翻越远方的大山》教学反思
2014/04/13 职场文书
SQL Server #{}可以防止SQL注入
2022/05/11 SQL Server