php - 将文件流式传输到 Android 客户端

标签 php android download

我想用 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/ 上找到了解决方案但这对我没有帮助。

最佳答案

my blog posting that you cite 中所述,您在 Android 设备上的下载成功取决于多种因素,这些因素不能通过阅读您的代码来判断:

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

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

  • 此外,您在所有细节上都没有遵守博文:
    在您的 Content-Disposition header 后有一个分号,这是致命的。

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

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

关于php - 将文件流式传输到 Android 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17062559/

相关文章:

php 转 excel 编码

php - 自定义 PDO 错误尝试/捕获

javascript - 如何使用 Javascript 下载、压缩和保存多个文件并取得进展?

php - MySQL - 孙子类别聚合

php - 为什么人们说 require_once 比 require 慢?

android - 在 ListView 中隐藏 Header View

Android Studio 发布签名 apk :app:transformClassesAndResourcesWithProguardForRelease java. io.IOException

Android:proGuard 教程,用于指定混淆中的排除和包含

java - 使用apache poi实现excel下载时如何设置excel文件的名称?

android - 我的 android 应用程序可以下载图像,但不会出现在图库中