如何启动从URL下载mp4(并防止mp4在浏览器中播放)?

时间:2019-04-19 17:35:03

标签: javascript php html

我正在尝试启动位于URL的mp4文件的下载(我无权访问该文件本身)。我不想在浏览器中播放视频,也不想用户必须离开网页。

我曾尝试创建一个<a>元素并使用download属性,但它必须与IE兼容,IE不支持download属性,因此不可行。

我已经尝试过window.open('https://example.com/file-name.mp4');,但是某些浏览器只会在新标签页中开始播放视频,而无需下载它。

我还尝试了window.open('https://mywebsite.com/download.php?file-id');,其中的download.php文件会检查以确保用户有权下载该文件,设置url的格式,设置Content-Type和Content-Disposition标头,并以{{ 1}}。这很好,除了失败时,download.php页面保持打开状态。我宁愿能够在原始页面上显示错误消息,而不必为download.php设置错误页面。

我试图通过AJAX调用使用上述方法来避免重定向问题,但是我无法弄清楚如何获取响应并开始下载响应。

如何启动mp4文件的下载,而又没有在浏览器中播放或重定向到另一个网页的机会?

1 个答案:

答案 0 :(得分:2)

<?php
set_time_limit(0);
$file = 'file-name.mp4';

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    if(!readfile($file)) {
       echo "error occured!";
    }
    exit;
} else {
    echo "Error file not found";
}
?>