我的根目录中有一个名为files
的文件夹。
此文件夹包含的文件范围为1 Kb-1 GB
。
我想要一个可以使用AJAX异步下载文件的PHP脚本。
此代码在单击文件时启动下载脚本:
JQUERY
$('.download').click(function(){
var src =$(this).attr('src');
$.post('download.php',{
src : src //contains name of file
},function(data){
alert('Downloaded!');
});
});
PHP
<?php
$path = 'files/'.$_POST['src'];
//here the download script must go!
?>
下载文件的最佳,最快和最安全方式是什么?
答案 0 :(得分:4)
<?php
/**
* download.php
*/
if (!empty($_GET['file'])) {
// Security, down allow to pass ANY PATH in your server
$fileName = basename($_GET['file']);
} else {
return;
}
$filePath = '???/files/' . $fileName;
if (!file_exists($filePath)) {
return;
}
header("Content-disposition: attachment; filename=" . $fileName);
header("Content-type: application/pdf");
readfile($filePath);
使用Content-disposition: attachment
时,实际上AJAX请求是不必要的:
<a href="download.php?file=file1.pdf">File1</a>
答案 1 :(得分:0)
要继续原始答案,我添加了一些php函数,使其更具编程性:
$filePath = $_GET['path'];
$fileName = basename($filePath);
if (empty($filePath)) {
echo "'path' cannot be empty";
exit;
}
if (!file_exists($filePath)) {
echo "'$filePath' does not exist";
exit;
}
header("Content-disposition: attachment; filename=" . $fileName);
header("Content-type: " . mime_content_type($filePath));
readfile($filePath);
如果服务器需要强大的安全性,请不要在未使用同一脚本预先验证用户的情况下使用此功能。或使用原始答案发布的安全措施。该脚本将允许用户下载服务器上的任何文件。