在浏览器中下载视频,而不是在新标签页中播放[CORS]

时间:2018-10-07 09:53:36

标签: javascript browser cors cross-browser

我有<a>,在其href属性中,我从第三方API中获得了视频网址,当点击该<a>时,浏览器会打开一个“新标签”, 播放视频而不是下载!

问题:我需要实现的是在点击该<a>之后直接下载视频,而不是在“新建”标签中播放该视频并强迫用户使用Right Click然后选择Save Video As选项以手动下载...只需点击Download,浏览器就会开始下载该视频!

注意::我正在构建一个JavaScript应用程序,因此我需要使用JavaScript而不是PHP的解决方案,它也必须在所有浏览器上都可以使用...

编辑:我尝试了download attribute,但它不起作用,因为它仅适用于同一来源!

更新:我发现的唯一解决方案是+7年的旧版本,它可以使用.htaccess文件进行操作,您可以在此CSS Tricks Article进行检查,它有一个常见问题,我没有2个链接:使用此解决方案的Watch VideoDownload Video ...许多开发人员在此提到了此错误,但还没有人解决!

5 个答案:

答案 0 :(得分:2)

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

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

在线演示:http://pagedemos.com/v84rawmzntzt/output/

答案 1 :(得分:0)

您需要按如下所示设置服务器中的标头,例如Content-Disposition

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

要允许预览和下载,您可以根据查询参数附加这些标头,例如,如果url有?download,则附加这些标头以告诉浏览器下载文件而不是查看文件。

答案 2 :(得分:0)

  • 您无法更改第三方服务器的标头。

  • 您不想实现可以代理请求并更新标头的服务器。

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

答案 3 :(得分:0)

由于它是来自第三方API的视频网址,因此您可以通过两种方式解决该问题:

  1. 联系api提供者,要求他们添加标题“ Content-Type:application / octet-stream”。
  2. 代理第三方api,并在代理中添加标头“ Content-Type:application / octet-stream”。
  

是的,关键是在http响应中设置content-type标头。

答案 4 :(得分:-1)

我最好的猜测是将用户重定向到一个单独的页面,以强制浏览器下载文件而不是查看文件(图像,视频,pdf)

使用 readfile 函数的

PHP示例创建一个download.php文件

EOF

希望有帮助。

Source