强制网络浏览器播放文件而不是下载
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/mp4
和 video/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_path 中有任何 PHP 文件,则可以通过此脚本下载。
【讨论】:
感谢您的回答!事实证明 MIME 类型是主要问题。服务器上的配置面板具有添加与文件扩展名相关的 MIME 类型的功能。MIME Type File Extension
video/x-m4v .m4v
所以现在,任何带有 m4v 文件的东西都被分配了一个 MIME 类型 video/x-m4v
我知道我误读了你的问题,我在解释如何强制浏览器下载文件,而不是在浏览器中播放。对不起...以上是关于强制网络浏览器播放文件而不是下载的主要内容,如果未能解决你的问题,请参考以下文章
托管 WebBrowser 控件尝试下载 Flash 内容而不是播放它