我想说我想生成一个下载链接并将其放入<a>
标记。
我的php脚本:
function download_link(){
$this_id = "d"; //this is the name of file from server
$original_filename = 'xample.pdf'; //This come from database
$ext = pathinfo($original_filename, PATHINFO_EXTENSION);
$file = '../uploads/'.$this_id.'.'.$ext;
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/'.$ext);
header('Content-Disposition: attachment; filename='.$original_filename);//Rename the file with its original filename
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
return readfile($file);//Here where i want to return the generated url
}
return '#'; //Or return nothing if file doesn't exist
echo '<a href="'.function download_link().'"></a>'; //And put it here, the generated url
现在,我的目录位置是../uploads/
。
我希望得到如下结果:<a href="www.myserver.com/whatever the new url is"></a>
所以当用户点击此标签时,将下载该文件。但相反,当我重新加载页面时,它会自动下载,而不会点击<a>
标签的下载按钮。
note:
我试图在点击下载时重命名文件名。
我知道我的逻辑存在问题。也许这可以用JQUERY完成?还是AJAX?我正在寻找解决方案,但没有找到答案。
这是我用JQUERY AJAX做的事情:
HTML标签
<a id="server_name_file_name">download</a>
JQUERY AJAX:
$('a').click(function(e) {
e.preventDefault();
var id = $(this).attr('id');
$.ajax({
type: 'POST',
url: 'download.php',
data: { server_file_name: id,},
success: function(response) {
if(response == 1){
alert("Unable to download, Maybe the file is corrupted. Please try to reload the page.");
}else{
window.location.href = response;
return false;
}
}})
});
的download.php
$this_id = $_POST['server_file_name'];
$original_filename = 'xample.pdf'; //This come from database
$ext = pathinfo($original_filename, PATHINFO_EXTENSION);
$file = '../uploads/'.$this_id.'.'.$ext;
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/'.$ext);
header('Content-Disposition: attachment; filename='.$original_filename);//Rename the file with its original filename
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
echo readfile($file);//Here where i want to return the generated url
exit();
} die('1');
但不起作用。
有人可以帮我吗?
谢谢!!!!
答案 0 :(得分:0)
您将返回actual contents of the file with readfile。 这就是为什么浏览器开始下载你返回的文件。
您需要做的是生成指向文件的字符串。 如果您的“上传”目录可以通过网址访问,那么您的downloads.php应如下所示:
$this_id = $_POST['server_file_name'];
$original_filename = 'xample.pdf'; //This come from database
$ext = pathinfo($original_filename, PATHINFO_EXTENSION);
$file = '../uploads/' . $this_id . '.' . $ext;
if (file_exists($file)) {
echo 'www.myserver.com/uploads/' . $this_id . '.' . $ext;
exit();
}
die('1');
如果无法从外部访问您的上传目录,则需要先将该文件复制到公共目录中。
答案 1 :(得分:0)
乍一看,我可以发现一些问题。
您的下载功能不会返回文件的链接,而是会自动输出文件,因此在刷新页面时,文件正在下载是合乎逻辑的。
另外,我可以看到您使用function download_link()
来调用您的函数,而应该直接download_link()
。
应该这样做的正确方法是将下载链接指向执行download_link函数的文件(例如:http://yoursite.com/download_file.php?file=filename)
当然建议在URL中使用id而不是filename并应用您需要的所有安全性等...
在download_file.php文件中,您可以调用download_link($filename)
或更好download_link($id)
并从数据库或存储它的任何位置获取文件名,然后像现在一样输出文件。< / p>