实例讲解javascript实现异步图片上传方法


Posted in Javascript onDecember 05, 2017

我们首先看下HTML代码实现的form提交部分。其中大家在测试的时候需要把test的URL更换成自己的,也可以直接写一个本地地址测试。

html代码:

<form id="uploadForm" action="http://storage.test.com/file/upload" method="post" enctype="multipart/form-data">
  <input type="hidden" name="key" id="key" value="VTZ18HM64#D_L3WX" />
  <input type="file" name="uploadFiles" value="" id="fileImage" multiple='multiple' />
  <div class="upload_submit">
  <button type="button" id="fileSubmit" class="upload_btn">保存</button>
  </div>
</form>

js代码:

var Fileupload = {
  fileInput: $("#fileImage").get(0),
  dragDrop: $("#fileDragArea").get(0),
  upButton: $("#fileSubmit").get(0),
  url: $("#uploadForm").attr("action"),
  })(),
  //文件上传
  funUploadFile: function() {
   var self = this;
   for (var i = 0, file; file = this.fileFilter[i]; i++) {
    (function(file) {
     var xhr = new XMLHttpRequest();
     if (xhr.upload) {
      // 上传中
      xhr.upload.addEventListener("progress", function(e) {
       self.onProgress(file, e.loaded, e.total);
      }, false);
      // 文件上传成功或是失败
      xhr.onreadystatechange = function(e) {

      if (xhr.readyState == 4) {
        if (xhr.status == 200) {
         self.onSuccess(JSON.parse(xhr.responseText));
         self.funDeleteFile(file);
         if (!self.fileFilter.length) {
          //全部完毕
          self.onComplete();
         }
        } else {
         self.onFailure(file, xhr.responseText);
        }
       }
      };
      //准备FormData对象
      var myForm = document.getElementById('uploadForm');
      //将文件放入FormData对象中
      formData = new FormData(myForm);

      // 开始上传
      xhr.open("POST", self.url, true);
      xhr.send(formData);
     }
    })(file);
   }
  },
  init: function() {
   var self = this;
   //上传按钮提交
   if (this.upButton) {
    console.log('提示: 当前存储服务器地址', this.url)
    this.upButton.addEventListener("click", function(e) {
     self.funUploadFile(e);
    }, false);
   }
   self.bindEvent();
  }
 };
 Fileupload = $.extend(Fileupload);
 Fileupload.init();

FormData 异步上传文件

<input type="file" id="file">

一、创建FormData放入待上传文件

//准备FormData对象
var formData = new FormData(),
 uploadFile = document.getElementById('file');
 
//将文件放入FormData对象中 
formData.append('file', uploadFile.files[0]);

二、通过xhr发送FormData数据到服务器,实现文件上传

//创建xhr对象
var xhr = new XMLHttpRequest();

//监听文件上传进度
xhr.upload.onprogress = function(evt){
 //lengthComputabel: 文件长度是否可计算
 if(evt.lengthComputable){
  //evt.loaded: 已下载的字节数
  //evt.total: 文件总字节数
  var percent = Math.round(evt.loaded*100/evt.total);
  console.log(percent);
 }
}

//监听文件传输开始 
xhr.onloadstart = function(evt){
  xhr.abort() //终止上传
}

//监听ajax成功完成事件
xhr.onload = function(evt){
 ...
}

//监听ajax错误事件 
xhr.onerror = function(evt){
 ...
}

//监听ajax被中止事件
xhr.onabort = function(evt){
 ...
}

//监听传输结束事件: 不管成功或者失败都会触发
xhr.onloaded = function(evt){
 ...
}
 
//*发起ajax请求数据
xhr.open('POST', '/url', true);
xhr.send(formData);
Javascript 相关文章推荐
jQuery 事件队列调整方法
Sep 18 Javascript
Jquery截取中文字符串的实现代码
Dec 22 Javascript
jquery移除button的inline onclick事件(已测试及兼容浏览器)
Jan 25 Javascript
javascript ie6兼容position:fixed实现思路
Apr 01 Javascript
JS 模态对话框和非模态对话框操作技巧汇总
Apr 15 Javascript
基于bootstrap3和jquery的分页插件
Jul 31 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
Oct 28 Javascript
详解jQuery中的DOM操作
Dec 23 Javascript
javascript函数的四种调用模式
Jan 08 Javascript
JS实现的Unicode编码转换操作示例
Apr 28 Javascript
详解微信小程序 通过控制CSS实现view隐藏与显示
May 24 Javascript
微信小程序上传图片到php服务器的方法
May 23 Javascript
jquery如何实现点击空白处隐藏元素
Dec 05 #jQuery
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
Dec 05 #jQuery
最实用的JS数组函数整理
Dec 05 #Javascript
微信小程序picker组件简单用法示例【附demo源码下载】
Dec 05 #Javascript
Vue DevTools调试工具的使用
Dec 05 #Javascript
Vue 项目部署到服务器的问题解决方法
Dec 05 #Javascript
webpack学习教程之前端性能优化总结
Dec 05 #Javascript
You might like
php实现文件下载简单示例(代码实现文件下载)
2014/03/10 PHP
微信公众平台消息接口校验与消息接口响应实例
2014/12/23 PHP
避免Smarty与CSS语法冲突的方法
2015/03/02 PHP
php脚本运行时的超时机制详解
2016/02/17 PHP
PHP等比例压缩图片的实例代码
2018/07/26 PHP
JS URL传中文参数引发的乱码问题
2009/09/02 Javascript
让textarea自动调整大小的js代码
2011/04/12 Javascript
基于jquery实现漂亮的动态信息提示效果
2011/08/02 Javascript
JavaScript之编码规范 推荐
2012/05/23 Javascript
Node.js中的缓冲与流模块详细介绍
2015/02/11 Javascript
javascript函数命名的三种方式及区别介绍
2016/03/22 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
2016/08/08 Javascript
从零开始最小实现react服务器渲染详解
2018/01/26 Javascript
微信小程序实现日历效果
2018/12/28 Javascript
layui.tree组件的使用以及搜索节点功能的实现
2019/09/26 Javascript
如何通过JS实现转码与解码
2020/02/21 Javascript
vue滑动吸顶及锚点定位的示例代码
2020/05/10 Javascript
[02:55]2018DOTA2国际邀请赛勇士令状不朽珍藏Ⅲ饰品一览
2018/08/01 DOTA
[14:19]2018年度COSER大赛-完美盛典
2018/12/16 DOTA
Python 自动刷博客浏览量实例代码
2017/06/14 Python
python记录程序运行时间的三种方法
2017/07/14 Python
Python实现发送QQ邮件的封装
2017/07/14 Python
Python PyQt5实现的简易计算器功能示例
2017/08/23 Python
python编写分类决策树的代码
2017/12/21 Python
Python实现KNN(K-近邻)算法的示例代码
2019/03/05 Python
Python pandas库中的isnull()详解
2019/12/26 Python
美国基督教约会网站:ChristianCafe.com
2020/02/04 全球购物
教师的实习自我鉴定
2013/12/17 职场文书
大学生村官考核材料
2014/05/23 职场文书
感恩教师节演讲稿
2014/09/03 职场文书
初级党校心得体会
2014/09/11 职场文书
出纳试用期自我评价
2015/03/10 职场文书
2015年防汛工作总结
2015/05/15 职场文书
个人道歉信大全
2019/04/11 职场文书
基于JavaScript实现年月日三级联动
2021/06/22 Javascript
python对文档中元素删除,替换操作
2022/04/02 Python