2016-05-14 1 views
0

XMLHttpRequestで実際のファイルを取得するにはどうすればよいですか? evt.target.filesを使用すると、fileListオブジェクトが返され、サーバー上に保存するために、実際のファイルをPHPの端で取得することができません。以下は XMLHttpRequestで実際のファイルを取得するにはどうすればよいですか?

はコードであり、そして私はresponseTextはあなたがいるFormDataに1つのファイルを追加し print_r($_POST);

function handleFileSelect(evt) { 
 

 
    reader = new FileReader(); 
 
    reader.onload = function(e) { 
 
    // Ensure that the progress bar displays 100% at the end. 
 
    progress.style.width = '100%'; 
 
    progress.textContent = '100%'; 
 
    setTimeout("document.getElementById('progress_bar').className='';", 2000); 
 

 

 
    ///////////THE JSON/////////////to encase file in JSON object 
 
    var sendFile = function(url, successHandler, errorHandler) { 
 
     var xhr = typeof XMLHttpRequest != 'undefined' ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP'); 
 
     xhr.open('post', url, true); 
 

 
     //XHR progress tracking 
 
     xhr.upload.onprogress = function(event) { 
 
     //var native_progress = document.getElementById("native_progress"); 
 
     //alert('in native_progress function'); 
 
     if (event.lengthComputable) { 
 
      var complete = (event.loaded/event.total * 100 | 0); 
 
      native_progress.value = native_progress.innerHTML = complete; 
 
     } 
 
     }; 
 

 
     xhr.onreadystatechange = function() { 
 
     var status; 
 
     var data; 
 
     // https://xhr.spec.whatwg.org/#dom-xmlhttprequest-readystate 
 
     if (xhr.readyState == 4) { // `DONE` 
 
      status = xhr.status; 
 
      if (status == 200) { 
 
      //data = JSON.parse(xhr.responseText); 
 
      data = xhr.responseText; 
 
      successHandler && successHandler(data); 
 
      } else { 
 
      errorHandler && errorHandler(status); 
 
      } 
 
     } 
 
     }; 
 

 
     var formData = new FormData(); 
 
     formData.append('file', evt.target.files[0]); 
 
     //xhr.setRequestHeader("Content-type", "multipart/gorm-data"); 
 
     //xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
 
     xhr.send(formData); 
 
    }; 
 

 
    sendFile('/ePub_Reader/temp_upload/save.php', function(data) { 
 
     alert('Response Text: ' + data); 
 
    }, function(status) { 
 
     alert('Something went wrong.'); 
 
    }); 
 
    ///////////THE JSON - end///////////// 
 

 
    // Read in the image file as a binary string. 
 
    //reader.readAsBinaryString(evt.target.files[0]); 
 
    reader.readAsDataURL(evt.target.files[0]); 
 
    } 
 

 
} 
 

 
document.getElementById('files').addEventListener('change', handleFileSelect, false);

Alert Showing php responseText generated by <code>print_r($_POST);</code>

答えて

0

PHPコードから返さ示す画像を添付していますオブジェクトではないFileList

formData.append('file', evt.target.files[0]); 
+0

ありがとうございます。しかし、私は何度もコードを変更して、誤って 'evt.target.files'を' [0] 'なしに投稿しました。配列を繰り返して '[i]'項目を選択します。\ n今、私は次のように 'var formData = new FormData();をテストしました。 \t \t \t formData.append( 'file'、evt.target.files [0]); \t \t alert(evt.target.files [0] ['size']); 'object file' 'を返しますが、 'print_r($ _ POST [' file '])を返すと、サイズは' 663732 bytes ' ); '私は '[object filelist]'を取得し、' fwrite($ name_handle、$ _POST ['file']); 'は17バイトの '破損'ファイルを保存します。 – akeem

+0

ファイル情報は '$ _POST'ではなく' $ _FILES'に格納されます – Musa

+0

良いです。 /アプリケーション/ MAMP /アプリケーション/ MAMP/[名前] => Saved_Book.epub [タイプ] => application/epub + zip [ tmp/php/phpoUpcZ6 [エラー] => 0 [サイズ] => 663732 ) '。 'fwrite()'関数は0バイトの "破損"ファイルを保存します。 – akeem

関連する問題