我网站上的用户可以下载文件。有时这些文件非常大,我希望用户在浏览器中看到下载进度条。
我使用以下代码为用户提供文件:
header('Content-Type: text/xml');
header('Content-Disposition: attachment; filename='.$fileName);
header('Pragma: no-cache');
header('Content-Transfer-Encoding: binary');
header('Pragma: public');
header('Content-Length: '.filesize($fullFileName));
header("Content-Description: File Transfer");
$fileHandler = fopen($fullFileName, 'r');
while(!feof($fileHandler)){
echo fread($fileHandler, 2048);
}
fclose($fileHandler);
当我运行此脚本浏览器(FireFox)冻结一段时间后,我可以看到加载颜色圈,并且只有在保存/打开对话框文件出现后。当我点击"保存"按钮,文件几乎立即下载到我的电脑(文件很大 - 50 Mb)。
我想在此site上下载系统。单击任何链接时,会立即显示save / opean对话框。然后,您可以在浏览器中看到下载进度。
是否有任何特殊标题可以在浏览器中显示进度条?我该如何更改代码?
答案 0 :(得分:0)
我使用下面的代码,在Firefox中它确实给了我下载时间和进度:
// send headers first
header('Content-type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
header('Content-disposition: attachment; filename='.$FileName);
header("Content-Length: ".filesize($Path));
// then use an easy way to flush and end all output buffers
while (@ob_end_flush());
// flush file
readfile($Path);
如果正确指定Content-Length
,它应该有效。我在代码中发现的唯一有点奇怪的是Content-Type: text/xml
标题。请注意,我使用Content-type: application/octet-stream
。