1

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

4

1 回答 1

2

正如您引用的我的博客文章中提到的那样,您在 Android 设备上下载的成功取决于多种因素,这些因素无法通过阅读您的代码来判断:

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

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

  • 此外,您没有完全遵守博客发布的所有细节:
    您的 Content-Disposition 标头后面有一个分号,这是致命的。

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

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

于 2013-11-20T08:03:33.510 回答