基于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 相关文章推荐
jquery 入门教程 [翻译] 推荐
Aug 17 Javascript
JavaScript 精粹读书笔记(1,2)
Feb 07 Javascript
javascript数组去重方法终极总结
Jun 05 Javascript
js判断登陆用户名及密码是否为空的简单实例
May 16 Javascript
详解微信小程序设置底部导航栏目方法
Jun 29 Javascript
详解webpack-dev-server 设置反向代理解决跨域问题
Apr 18 Javascript
vue.js动画中的js钩子函数的实现
Jul 06 Javascript
详解webpack自定义loader初探
Aug 29 Javascript
vue-cli3.0配置及使用注意事项详解
Sep 05 Javascript
angular6的table组件开发的实现示例
Dec 26 Javascript
js实现左右轮播图
Jan 09 Javascript
Vue过滤器(filter)实现及应用场景详解
Jun 15 Vue.js
编写高质量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面向对象全攻略 (十五) 多态的应用
2009/09/30 PHP
使用GD库生成带阴影文字的图片
2015/03/27 PHP
php微信公众号js-sdk开发应用
2016/11/28 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
javascript中的new使用
2010/03/20 Javascript
div层的移动及性能优化
2010/11/16 Javascript
node.js中的fs.writeSync方法使用说明
2014/12/15 Javascript
基于jQuery实现的菜单切换效果
2015/10/16 Javascript
JS使用cookie设置样式的方法
2016/06/30 Javascript
值得分享的JavaScript实现图片轮播组件
2016/11/21 Javascript
ES6学习笔记之Set和Map数据结构详解
2017/04/07 Javascript
详解Axios统一错误处理与后置
2018/09/26 Javascript
移动端H5页面返回并刷新页面(BFcache)的方法
2018/11/06 Javascript
说说如何利用 Node.js 代理解决跨域问题
2019/04/22 Javascript
laravel-admin 与 vue 结合使用实例代码详解
2019/06/04 Javascript
webpack实践之DLLPlugin 和 DLLReferencePlugin的使用教程
2019/06/10 Javascript
uni-app微信小程序登录授权的实现
2020/05/22 Javascript
Python使用正则匹配实现抓图代码分享
2015/04/02 Python
Python只用40行代码编写的计算器实例
2017/05/10 Python
python中的二维列表实例详解
2018/06/19 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
2018/08/30 Python
对django xadmin自定义菜单的实例详解
2019/01/03 Python
python实现日志按天分割
2019/07/22 Python
tensorflow使用range_input_producer多线程读取数据实例
2020/01/20 Python
利用pyecharts读取csv并进行数据统计可视化的实现
2020/04/17 Python
python logging.info在终端没输出的解决
2020/05/12 Python
PyCharm MySQL可视化Database配置过程图解
2020/06/09 Python
python的help函数如何使用
2020/06/11 Python
python中实现词云图的示例
2020/12/19 Python
html5 application cache遇到的严重问题
2012/12/26 HTML / CSS
日本最大的购物网站乐天市场国际版:Rakuten Global Market(支持中文)
2020/02/03 全球购物
Tea Collection官网:一家位于旧金山的童装公司
2020/08/07 全球购物
工厂厂长岗位职责
2013/11/08 职场文书
优秀教师事迹简介
2014/02/02 职场文书
校园广播稿500字
2014/02/04 职场文书
追悼会主持词
2014/03/20 职场文书