从这里开始:PHP finding file where post INCLUDES portion of filename
我想完成这个问题。
基本上,既然我能够将变量发布到PHP进程,然后使用该进程在目录中查找文件,我现在需要能够下载文件(如果存在)。
快速回顾一下,在用户输入航次号码并且数据表返回了航程列表后,用户然后点击链接,这是我将开始代码的地方:
$('.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
});
});
进程'fileDownload.php'如下所示:
<?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";
}
}
?>
我尝试使用此处的答案:Download files from server php
但是我不确定我应该把标题放在哪里,或者我是否需要使用它们。
答案 0 :(得分:0)
我建议你的快速解决方案是:如果文件存在则返回文件路径,如果文件不存在则返回false。 在您的JS代码中,您可以检查,如果您的&#34;数据&#34; == false,你可以抛出错误&#34;文件不存在&#34;,如果它不是&#34; false&#34;,你可以调用document.location.href = data; - 它会将您的浏览器重定向到该文件,并将其下载
答案 1 :(得分:0)
为什么不简单地使用下载属性:
def
如果您真的想使用JavasScript开始下载,请使用<?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";
}
}
?>
作为style="display:none;"
,然后在JS中点击它:
<a>
并称之为:
echo 'File found: <a id="myDownload" style="display:none;" href="' . $file . '" download>' . $file . '</a> \n';