実例はjavascriptを説明して、非同期の画像のアップロード方法を実現します。


まず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);