代码之家  ›  专栏  ›  技术社区  ›  Elharony

在浏览器中下载视频,而不是在新选项卡中播放[CORS]

  •  4
  • Elharony  · 技术社区  · 6 年前

    我有 <a> 在它的内部 href < 浏览器将打开一个新选项卡并 播放视频而不是下载!

    问题: <a> 而不是在一个新的选项卡中播放它并强制用户 Right Click 然后选择 Save Video As Download 浏览器开始下载视频!

    我正在构建一个JavaScript应用程序,所以我需要一个JavaScript而不是PHP的解决方案,它必须在所有浏览器上工作以及。。。

    我试过了 download attribute

    更新: 我找到的唯一解决办法是一个7岁以上的孩子,它用 .htaccess CSS Tricks Article ,它有一个共同的问题,我不能有2个链接: Watch Video Download Video 使用此解决方案。。。很多开发人员都提到了这个bug,但是还没有人修复它!

    5 回复  |  直到 6 年前
        1
  •  4
  •   dandavis    6 年前

    因为端点支持CORS,所以可以使用 my file download lib 保存内容而不是显示内容。

    download("http://distribution.bbb3d.renderfarming.net/video/mp4/bbb_sunflower_1080p_30fps_normal.mp4");

    http://pagedemos.com/v84rawmzntzt/output/

        2
  •  0
  •   Mohammed Essehemy    6 年前

    您需要设置标题,例如 Content-Disposition 从服务器发送,如下所示

      Content-Description: File Transfer
      Content-Type: application/octet-stream
      Content-Disposition: attachment; filename="filename.jpg"
    

    为了允许预览和下载,您可以根据查询参数附加这些标题,例如,如果url具有 ?download

        3
  •  0
  •   davidonet    6 年前
    • 无法更改第三方服务器的标头。

    我能看到的唯一解决方案是用js下载和处理浏览器中的内容 request axios 然后将其提交给用户(但您必须将其保存在内存中,这可能不适合大型视频)

        4
  •  0
  •   sanigo    6 年前

    由于它是来自第三方api的视频URL,您可以通过两种方式解决此问题:

    1. 代理第三方api,并在代理中添加标题“Content-Type:application/octet-stream”。

    是的,关键是在http响应中设置内容类型头。

        5
  •  -1
  •   Hamo    6 年前

    PHP示例使用 函数创建download.php文件

    <?php
    $file = 'monkey.gif';
    
    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));
        readfile($file);
        exit;
    }
    ?>
    

    希望有帮助。

    Source