2017-07-26 1 views
1

Ce qui a commencé ici: PHP finding file where post INCLUDES portion of filenamefichier de téléchargement de PHP à partir du serveur de POST

Je suis en train de finir avec cette question. Fondamentalement, maintenant que je suis en mesure de poster une variable à un processus PHP, puis utiliser ce processus pour trouver un fichier dans un répertoire, je dois maintenant être en mesure de télécharger le fichier si elle existe.

récapituler rapide, après que l'utilisateur a entré un numéro de voyage et datatable a renvoyé une liste de voyages, l'utilisateur clique sur le lien, qui est l'endroit où je vais commencer le code:

$('.voyageFileCall').on('click', function() 
{ 
    var voyage = $(this).attr('data-voyage'); 
    $.post('fileDownload.php', {voyage:voyage}, function(data) 
    { 
    // here is where I need to where either display the file doesn't exist 
    // or the file downloads 
    }); 
}); 

Le processus « fileDownload.php » ressemble à ceci:

<?php 
    if($_POST['voyage'] == true) 
    { 
    $voyage = $_POST['voyage']; 
    $files = scandir("backup/"); 
    if(count($files) > 0) 
    { 
     $fileFound = false; 
     foreach($files as $file) 
     { 
     if((preg_match("/\b$voyage\b/", $file) === 1)) 
     { 
      // I'm guessing the download process should happen here 
      echo "File found: $file \n"; // <-- this is what I currently have 
      $fileFound = true; 
     } 
     } 
     if(!$fileFound) die("File $voyage doesn't exist"); 
    } 
    else 
    { 
     echo "No files in backup folder"; 
    } 
    } 
?> 

J'ai essayé d'utiliser la réponse trouvée ici: Download files from server php

Mais je suis sûr que pas exactement w ici je devrais mettre les en-têtes, ou si j'ai besoin de les utiliser du tout.

S'il vous plaît, éclairez-moi s'il y a une meilleure façon de le faire.

Merci d'avance.

Répondre

0

La solution rapide que je peux vous suggérer est: renvoyer le chemin d'accès au fichier s'il existe et renvoyer false si le fichier n'existe pas. Après cela, dans votre code JS, vous pouvez vérifier, si vos "données" == faux, vous pouvez lancer une erreur "le fichier n'existe pas", et si ce n'est pas "faux", vous pouvez appeler document.location.href = données; - il rediriger votre navigateur vers le fichier et il sera téléchargé

0

Pourquoi ne pas utiliser simplement l'attribut de téléchargement:

<?php 
    if($_POST['voyage'] == true) 
    { 
    $voyage = $_POST['voyage']; 
    $files = scandir("backup/"); 
    if(count($files) > 0) 
    { 
     $fileFound = false; 
     foreach($files as $file) 
     { 
     if((preg_match("/\b$voyage\b/", $file) === 1)) 
     { 
      // I'm guessing the download process should happen here 
      echo 'File found: <a href="' . $file . '" download>' . $file . '</a> \n'; // <-- this is what I currently have 
      $fileFound = true; 
     } 
     } 
     if(!$fileFound) die("File $voyage doesn't exist"); 
    } 
    else 
    { 
     echo "No files in backup folder"; 
    } 
    } 
?> 

Si vous voulez vraiment utiliser JavasScript pour commencer le téléchargement utilisez style="display:none;" pour <a> puis dans JS cliquez simplement:

echo 'File found: <a id="myDownload" style="display:none;" href="' . $file . '" download>' . $file . '</a> \n'; 

et l'appeler:

$('.voyageFileCall').on('click', function() 
    { 
     var voyage = $(this).attr('data-voyage'); 
     $.post('fileDownload.php', {voyage:voyage}, function(data) 
     { 
if(document.getElementById("myDownload")){ 
document.getElementById("myDownload").click(); 
}else{ 
console.log("file does not exist"); 
} 
     }); 
    });