-6

我有问题,我的代码如下。

<?php
if(empty($_POST['download_button']) === false && isset($_POST['download_button'])){
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Type: application/octetstream');
    header('Content-Disposition: attachment; filename="'.$file_real_name.'"');
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . (int)(filesize($file_path)));
    ob_clean();
    flush();
    readfile($file_path);
}
?>
<form action="" method="post">
    <input type="submit" name="download_button" value="Download"" />
</form>

这是我当前的代码,但我不想要提交按钮。我想要一个可以开始下载的普通按钮或空白链接。我见过很多网站都这样做。我认为在 javascript 的帮助下。任何人都可以在这里提供帮助吗?我不希望用户知道文件服务器上的随机名称或位置。

我的意思是说还有其他方法可以通过 javascript 或 jquery 向 php 发送请求开始下载,并且无需提交表单即可开始下载。?

4

2 回答 2

1

使用 $_GET 使用超链接而不是提交按钮。

<?php
if(isset($_GET['download']) && $_GET['download']){
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Type: application/octetstream');
    header('Content-Disposition: attachment; filename="'.$file_real_name.'"');
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . (int)(filesize($file_path)));
    ob_clean();
    flush();
    readfile($file_path);
}
?>
<a href="?download=true">Download</a>
于 2013-09-25T23:47:31.680 回答
1

$_GET 之外的另一种方法:使用 jquery,您可以拥有一个调用 javascript 函数的链接,然后您可以即时访问 php 文件。这也不需要刷新页面

function buttonClicked()
{
    $.ajax({
       url:'downloadpage.php',
       data:{'filename':'name of file'},
       type:'post')};
}


<a onclick="buttonClicked()">Download now</a>
于 2013-09-25T23:50:27.820 回答