强制网络浏览器播放文件而不是下载

Posted

技术标签:

【中文标题】强制网络浏览器播放文件而不是下载【英文标题】:Force web browser to play files rather than downloading 【发布时间】:2014-05-22 15:49:04 【问题描述】:

我正在尝试在网络浏览器中播放文件,而不是下载。使用 WordPress 嵌入文件

    [video   m4v="http://www.justtalking.co.uk/wp-content/uploads/2014/02/Will-Aid-2013-Case-Study.m4v"][/video]

我想使用链接Link to Video 进行电子邮件营销。打开链接时,Web 浏览器会下载文件而不是播放文件。但是,如果视频在网络浏览器中播放,我会更喜欢!

这可能吗?

【问题讨论】:

【参考方案1】:

您需要在托管 m4v 文件的服务器上为 video/mp4video/x-m4v 添加 MIME/TYPE。您可以阅读here 部分“MIME 类型在他们丑陋的脑袋后面”了解如何执行此操作。

您的 URL 在响应标头中指示 Content-Type: text/plain 因此提示下载。

【讨论】:

从字面上看就知道了!不过感谢您的回复! 很高兴你把这个整理好了!【参考方案2】:

可能最纯粹的解决方案是在该文件中添加标题“Content-Disposition: attachment”。

它不能在 html 链接级别完成,但您可以通过 .htaccess 或虚拟主机配置来完成。

如果你有带 mod_header 的 apache2,你可以这样做:

<FilesMatch "\.jpg$">
    Header add "Content-Disposition" "attachment"
</FilesMatch>

您必须使用其他方法制作简单的 php 脚本,该脚本使用 header() 函数来完成这项工作,然后简单地将目标文件传递给输出。

<?php
$allowed_path = __DIR__."/downloads/";
$file = $allowed_path.basename($_GET["file"]);

if(file_exists($file)) 
    header("Content-disposition: attachment");
    readfile($file);

else 
    header('HTTP/1.1 404 Not Found', TRUE, 404);

我注意到的另一种方式是您的视频链接显示错误的内容类型(这是小问题):

Content-type: text/plain

你可以通过添加一个这样的标题来解决这个问题:

header("Content-type: ".mime_content_type($file));

但请注意安全性,因为如果您在 $allowed_pa​​th 中有任何 PHP 文件,则可以通过此脚本下载。

【讨论】:

感谢您的回答!事实证明 MIME 类型是主要问题。服务器上的配置面板具有添加与文件扩展名相关的 MIME 类型的功能。 MIME Type File Extension video/x-m4v .m4v 所以现在,任何带有 m4v 文件的东西都被分配了一个 MIME 类型 video/x-m4v 我知道我误读了你的问题,我在解释如何强制浏览器下载文件,而不是在浏览器中播放。对不起...

以上是关于强制网络浏览器播放文件而不是下载的主要内容,如果未能解决你的问题,请参考以下文章

强制浏览器下载 PDF 文档而不是打开它

如何强制浏览器下载 xml 文件?

托管 WebBrowser 控件尝试下载 Flash 内容而不是播放它

如何强制浏览器下载文件?

强制本地 html 文件中的超链接打开关联的应用程序而不是下载

如何在移动浏览器上使用 PHP 强制下载文件?