2017-07-26 3 views
1

Was hier begann: PHP finding file where post INCLUDES portion of filenamePHP Download-Datei vom Server aus POST

Ich versuche, sich mit dieser Frage zu beenden.

Grundsätzlich, jetzt, wo ich in der Lage bin, eine Variable in einen PHP-Prozess zu veröffentlichen, dann verwenden Sie diesen Prozess, um eine Datei in einem Verzeichnis zu finden, ich muss in der Lage sein, die Datei herunterladen, wenn sie existiert.

Schnell rekapitulieren, nachdem der Benutzer eine Reisenummer und die Datentabelle eingegeben hat, hat eine Liste von Reisen zurückkehrt, klickt der Benutzer dann auf den Link, das ist, wo ich den Code beginnen werde:

$('.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 
    }); 
}); 

Die Prozess ‚fileDownload.php‘ sieht wie folgt aus:

<?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"; 
    } 
    } 
?> 

ich habe versucht, hier die Antwort zu verwenden: Download files from server php

Aber ich bin nicht ganz sicher, w hier sollte ich die Header setzen, oder wenn ich sie überhaupt benutzen muss.

Bitte erleuchten Sie mich, wenn es eine bessere Möglichkeit gibt, dies zu tun.

Vielen Dank im Voraus.

Antwort

0

Die schnelle Lösung, die ich Ihnen vorschlagen kann, ist: den Pfad zur Datei zurückgeben, wenn sie existiert, und false zurückgeben, wenn die Datei nicht existiert. Danach können Sie in Ihrem JS-Code prüfen, ob Ihre "Daten" == false, Sie können einen Fehler "Datei existiert nicht", und wenn es nicht "falsch" ist, können Sie document.location.href aufrufen = Daten; - es wird in Ihrem Browser die Datei umleiten und es wird

0

heruntergeladen werden Warum Sie einfach nicht Download-Attribut verwenden:

<?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"; 
    } 
    } 
?> 

Wenn Sie wirklich den Download zu starten dann style="display:none;" für <a> verwenden möchten JavasScript verwenden und dann einfach in JS klicken sie:

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

und nennen es:

$('.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"); 
} 
     }); 
    }); 
Verwandte Themen