【问题标题】:Streaming file to Android Client将文件流式传输到 Android 客户端
【发布时间】:2013-06-12 09:54:41
【问题描述】:

我想用 android 下载一个文件,所以我用 php 用以下函数流式传输文件

function stream($fileName,$fileSize,$fName){
        //header("Pragma:public");
        //header("Expires:0");
        //header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        //header("Cache-Control:private",false);
        header("Content-Disposition:attachment;filename=\"".$fName."\";");
        header("Content-Type:application/octet-stream");  
        header("Content-Transfer-Encoding:binary");
        header("Content-Length:".$fileSize);
        readfile($fileName);
}

但下载无法在安卓设备上运行。在我的电脑上,这不是问题。我已经在 http://www.digiblog.de/2011/04/android-and-the-download-file-headers/ 上找到了解决方案,但这对我没有帮助。

【问题讨论】:

    标签: php android download


    【解决方案1】:

    正如my blog posting that you cite中提到的,你在安卓设备上下载的成功取决于多种因素,这不是通过阅读你的代码来判断的:

    • 您的 $fileName 必须包含大写扩展名。

    • 您调用下载的纯 URL 必须包含开始下载所需的所有信息。可能不涉及 POST 参数,它们不会被转发到 Android 下载管理器,因此下载将失败。 GET参数(查询字符串)没问题。

    • 另外,您也没有遵守博文的所有细节:
      您的 Content-Disposition 标头后面有一个分号,这是致命的。

    我还建议仅从 Content-Type 和 Content-Disposition 标头开始。当你让它在 Android 上运行时,你仍然可以添加你想要发送的任何其他标题。但是不要忘记在完成后在 Android 上重新测试(如果可能,可以使用多个版本)。 Android 对其中一些标题非常挑剔(或者我应该说“卑鄙”?)。

    如果所有这些都没有帮助,您将不得不提供有关您的案例的更多信息。当你尝试它时究竟会发生什么?你叫什么网址。传递给你的函数的参数是什么?

    【讨论】:

      猜你喜欢
      • 2015-11-29
      • 2012-02-10
      • 1970-01-01
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      • 2014-12-06
      • 2014-09-26
      • 1970-01-01
      相关资源
      最近更新 更多