php+ajax実装ファイルカットアップロード機能例

2890 ワード

この例では、php+ajaxによるファイルカットアップロード機能について説明します.皆さんの参考にしてください.具体的には以下の通りです.
html 5のFileオブジェクトはBlobバイナリオブジェクトを継承し、Blobはファイルデータを切断するためのslice関数を提供します.




  
  


  </code></pre><form method="post" id="myForm">
    <input type="file" name="file" id="upfile"/>
    <input type="submit" name="submit" value="  "/>
  </form>
  <div id="upStatus"/>

<script type="text/javascript">
  var myForm = document.getElementById("myForm");
  var upfile = document.getElementById("upfile");

  myForm.onsubmit = function() {
    //      
    var file = upfile.files[0];
    //      
    var fileSize = file.size;
    //       (  )
    var CutSize = 1024 * 1024 * 10;
    //      
    var CutStart = 0;
    //      
    var CutEnd = CutStart + CutSize;
    //       
    var tmpfile = new Blob();

    while(CutStart < fileSize) {
      tmpfile = file.slice(CutStart, CutEnd);

      //      FormData  
      var fd = new FormData();
      //      FormData   
      fd.append("file", tmpfile);

      var xhr = new XMLHttpRequest();
      //      
      xhr.open("post", "upfile.php", false);

      //    
      console.log(Math.round( (CutStart + tmpfile.size) / fileSize * 100) + "%");

      //  FormData  
      xhr.send(fd);
      //          
      CutStart = CutEnd;
      CutEnd = CutStart + CutSize;
    }
    return false;
  };
</script>


 
 </div> 
 <p>upfile.php    :</p> 
 <div class="jb51code"> 
  <pre><code>
<?php $uploadDir = './upload/';
if(!file_exists($uploadDir)) {
  @mkdir($uploadDir, 0777, true);
}
$uploadFile = $uploadDir . basename($_FILES['file']['name']);

if(!file_exists($uploadFile)) {
  //       
  move_uploaded_file($_FILES['file']['tmp_name'], $uploadFile);
} else {
  //       ,    
  file_put_contents($uploadFile, file_get_contents($_FILES['file']['tmp_name']), FILE_APPEND);
}

</pre?> 
 </code></pre></div> 
 <p>    PHP           :《PHP+ajax       》、《PHP        》、《php   (string)    》、《php+mysql         》 《php           》</p> 
 <p>         PHP        。</p> 
 <div class="lbd_bot clearfix"> 
  <span id="art_bot" class="jbTestPos"/> 
 </div> 
</div>
                            </div>
                        </div>