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

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

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

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

这可能吗?

【问题讨论】:

    标签: php wordpress web video-streaming html5-video


    【解决方案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
    • 我知道我误读了你的问题,我在解释如何强制浏览器下载文件,而不是在浏览器中播放。对不起...
    猜你喜欢
    • 1970-01-01
    • 2013-04-13
    • 2013-02-21
    • 2011-06-19
    • 1970-01-01
    • 2013-10-15
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多