2013-04-17 188 views
0

我希望能夠使用AJAX上傳文件。通過AJAX上傳文件

我嘗試使用(JavaScript的):

$("input[type='file']").change(function(){ 
     var file = document.getElementById("uploadelement").files[0]; 
     $.ajax({ 
      url: "upload.php", 
      type: "POST", 
      beforeSend: function(xhr){ 
       xhr.setRequestHeader("X_FILENAME", file.name); 
      }, 
      success: function(data){ 
       console.log(data); 
      } 
     }); 
    }); 

隨着(PHP):

<?php 

    $fn = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] : false); 
    if ($fn) { 
     // AJAX call 
     file_put_contents(
      'uploads/' . $fn, 
      file_get_contents('php://input') 
     ); 
     echo "$fn uploaded"; 
     exit(); 
    } 

?> 

不過,我遇到的問題,該文件內容顯示不出來。我不知道發生了什麼問題。我發現這個代碼在tutorial,所以我覺得它應該工作。

該文件被上傳到文件夾,但沒有內容。

+0

你沒有發送這個文件,這在查看你的客戶端代碼後很清楚。 –

+0

您是否試過'document.getElementById(「uploadelement」)。files;'而不是'document.getElementById(「uploadelement」)。files [0];'? []括號通常用於多次上傳。可能是問題,但我不能100%確定。 –

+0

@Fred'document.getElementById(「uploadelement」)。files'只返回一個數組。 – Shawn31313

回答

2

我不知道用jQuery的$.ajax()電話,但是這可以通過使用XMLHttpRequest,像這樣來實現:

var file = document.getElementById("uploadelement").files[0]; 
var form_data = new FormData(); 
form_data.append("userfile", file); 

var xmlhttp = new XMLHttpRequest(); 
xmlhttp.open("POST", "upload.php"); 
xmlhttp.send(form_data); 
在你的PHP上傳處理程序

然後(在這裏upload.php的):

move_uploaded_file($_FILES["userfile"]["tmp_name"], "path/to/uploads/" . $_FILES["userfile"]["name"]); 

然後文件應該已經保存到所需的目錄。