欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-09-16 14:13:48
我们首先看下html代码实现的form提交部分。其中大家在测试的时候需要把test的url更换成自己的,也可以直接写一个本地地址测试。 html代码: <...

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