我想写一个文件下载页面,供客户从我公司的服务器上下载文件。
而且我不想向用户公开真实的文件链接,所以我有两个页面: filelist.php 用于提供单击链接并将文件名作为参数发布到另一个页面,名为 download.php ,接受请求并将文件流传输给客户。
download.php 的关键部分是这样的:
$fp = fopen($real_file_path,'r');
$file_size = $temp_res['ef_file_bytes'];
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length: ".$file_size);
Header("Content-Disposition: attachement;filename=".$file_name);
echo fread($fp,$file_size);
fclose($fp);
exit;
现在我在 filelist.php 中使用了一个 onclick() 函数,当点击文件链接时,会调用以下函数:
function downloadfile( ef_name )
{
var url_str='download.php';
url_str = encodeURI(url_str);
$.post(
url_str,{fnm:ef_name },
function(data){
window.open().document.write(data);
}
);
}
但我只能在页面中显示文件的内容,而不是弹出一个对话框窗口来保存它。
如果我用来测试,它工作得很好。
上面 JS 代码中的“数据”正是我要下载的文件的全部内容。我认为问题在于我在 $.post(); 中使用的函数;javascript中是否有任何功能可以使用post参数打开一个新页面?
我在 windows、apache、php、mysql 上。谢谢!