在使用下面的代码进行一些测试后,我得出了这样的结论:
我明显的问题是:我做错了什么?如何在firefox或更好的任何常见浏览器中正确下载mkv文件。我在谷歌上找不到任何有用的东西,但也许我只是在找错了地方。
尝试下载mkv文件时出现Firefox错误:
损坏的内容错误
您尝试查看的页面无法显示,因为检测到数据传输错误。
您尝试查看的页面无法显示,因为检测到数据传输错误。请联系网站 业主告诉他们这个问题。
function download($file)
{
$path = $_SERVER['DOCUMENT_ROOT']; //<-- added the relative part after that
$fullPath = $path.$file;
set_time_limit(0);
if ($fd = fopen ($fullPath, "r"))
{
$fsize = filesize($fullPath);
$path_parts = pathinfo($fullPath);
$ext = strtolower($path_parts["extension"]);
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: video/x-matroska");
header("Content-Disposition: attachment; filename=\"$file\"");
header("Content-Transfer-Encoding: binary");
header("Content-length: $fsize");
$file = @fopen($fullPath,"rb");
if ($file)
{
while(!feof($file))
{
print(fread($file, 1024*8));
flush();
if (connection_status()!=0)
{
@fclose($file);
die();
}
}
@fclose($file);
}
exit;
}
}
答案 0 :(得分:0)
服务器上mkv文件的绝对路径
Firefox可能会在filename
标头值的绝对路径上窒息。
请尝试仅指定文件名:
$filename = pathinfo($filePath, PATHINFO_BASENAME);
header("Content-Disposition: attachment; filename=\"$filename\"");
答案 1 :(得分:0)
解决方案:
我应该检查我定义的变量是否设置为预期值。变成filesize()返回一个带有32位的signed int。
现在我刚刚接受了这里显示的功能:https://stackoverflow.com/a/5502328/1232791
另一种可能的解决方案是不定义内容长度标头。有了这个解决方案,客户端就不会知道他的下载需要多长时间。