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


Force web browser to play files rather than downloading

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

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

我想使用链接到视频的电子邮件营销目的。当链接打开时,web浏览器会下载文件,而不是播放。然而,我更喜欢在网络浏览器中播放视频!

这可能吗?

您需要在托管m4v文件的服务器上为video/mp4video/x-m4v添加MIME/TYPE。你可以在这里阅读"MIME类型背后丑陋的头"一节,了解如何做到这一点。

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

最纯粹的解决方案可能是在该文件中添加标题"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_path中有任何PHP文件,都可以通过此脚本下载。