【问题标题】:Why is this PHP download script failing only on Android为什么这个 PHP 下载脚本只在 Android 上失败
【发布时间】:2011-11-05 14:31:21
【问题描述】:

我有一个简单的脚本,允许某人将电影文件下载到他们的设备上。该代码适用于我测试过的所有东西,除了 Andriod。 Android 设备屠宰了名称和文件扩展名。它可能会调用文件 2.qt 或 .bin。为什么会失败?

<?php

        if(isset($_GET['filename'])) {

            header('Content-Description: File Transfer');
            header('Content-Type: movie/quicktime');
            header('Content-Disposition: attachment; filename="'.basename($file).'"');
            header('Content-Transfer-Encoding: binary');
            header('Expires: 0');
            header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
            header('Pragma: public');
            header('Content-Length: ' . filesize("$file"));
            ob_clean();
            flush();
            readfile("$file"); 
    } else {
        echo "Link: <a href='test.php?filename=test.mov'>Download Video</a>";
    }
?>

【问题讨论】:

    标签: php android download


    【解决方案1】:

    Because Android doesn't natively support Quicktime, an Apple technology. 用于下载此应用程序的客户端也很可能不尊重 http 信封上设置的文件名作为它用于将文件写入文件系统的名称,因为有 nothing forcing it to

    【讨论】:

    • 我知道 Android 本身并不支持 Quicktime,但这不是我关心的问题。我只是想能够下载文件,我不关心播放它。您说没有什么强制客户端将文件名命名为 http 信封中提供的名称。有没有办法强制它?
    • 我阅读了您提供的链接,我认为它对我没有帮助。它正在谈论用 Java 为 Android 编写应用程序,这不是我想要做的。我正在尝试编写一个允许设备下载文件的 php Web 应用程序。也许你是说我不能强制浏览器使用我提供的文件名,除非我写一个安卓应用?
    • 是的,这就是 sn-p 的意思。很难说有问题的浏览器(可能是原生浏览器或 Doplhin)是如何实现文件下载操作的,但很可能它没有使用您提供的文件名属性或重写它。
    • 问题是文件名有空格,Andriod 不喜欢这样。我删除了空格,一切都很好。
    【解决方案2】:

    问题是文件名有空格,而 Android 不喜欢这样。我删除了空格,一切都很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-22
      相关资源
      最近更新 更多