【问题标题】:How to initiate download of mp4 from url (and prevent the mp4 from playing in the browser)?如何从 url 开始下载 mp4(并防止 mp4 在浏览器中播放)?
【发布时间】:2019-04-25 01:44:13
【问题描述】:

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

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

我试过window.open('https://example.com/file-name.mp4');,但有些浏览器会直接在新标签页中播放视频,而不是下载视频。

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

我尝试将上述方法与 AJAX 调用一起使用以避免重定向问题,但我不知道如何获取响应并使用它开始下载。

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

【问题讨论】:

  • 在您的 PHP 主页上,您可以进行处理以验证和输出任何错误。如果没有错误,请提供 download.php 的链接。但不要从 download.php 中删除错误处理。因此,他们只能在获得下载权限之前在主页上看到错误,但 download.php 仍然会进行处理,以防万一有人自己创建 URL。

标签: javascript php html


【解决方案1】:
<?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";
}
?>

【讨论】:

    猜你喜欢
    • 2015-06-30
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    相关资源
    最近更新 更多