当前位置: 移动技术网 > IT编程>开发语言>JavaScript > 实例讲解javascript实现异步图片上传方法

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

2018年04月22日  | 移动技术网IT编程  | 我要评论

我们首先看下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);

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网