2013-04-17 5 views
0

Je souhaite pouvoir télécharger des fichiers à l'aide d'AJAX.Téléchargement de fichiers via AJAX

J'ai essayé d'utiliser (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); 
      } 
     }); 
    }); 

Avec (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(); 
    } 

?> 

Cependant, je vais avoir la question, que le contenu des fichiers est pas présenté . Je ne suis pas sûr que ce qui ne va pas. J'ai trouvé ce code sur un tutorial alors j'ai pensé que ça devrait marcher.

Le fichier est téléchargé dans le dossier mais il n'y a pas de contenu.

+0

Vous n'envoyez pas le fichier, c'est assez clair après avoir regardé votre code client. –

+0

Avez-vous essayé 'document.getElementById (" uploadelement "). Fichiers;' au lieu de 'document.getElementById (" uploadelement "). Fichiers [0];'? Les crochets '[]' sont généralement utilisés pour plusieurs téléchargements. Peut-être le problème, mais je ne pouvais pas être sûr à 100%. –

+0

@Fred 'document.getElementById (" uploadelement "). Files' retourne juste un tableau. – Shawn31313

Répondre

2

Je ne sais pas avec l'appel jQuery $.ajax(), mais cela peut être réalisé en utilisant un XMLHttpRequest, comme ceci:

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

Ensuite, dans votre gestionnaire de téléchargement de PHP (upload.php ici):

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

Ensuite, le fichier doit déjà être enregistré dans le répertoire souhaité.

Questions connexes