如何从Android中的手机间隙文件上传中读取分块数据

时间:2012-03-03 04:04:01

标签: php android apache file-upload cordova

我们正尝试将视频文件从手机移动应用上传到网络服务器。在iPhone中一切都很好,但在Android上,数据是以块的形式发送的,我们的服务器应用程序(php)无法处理它。

//phonegap 
var options = FileUploadOptions();
options.chunkedMode = true; //default

我们尝试将chunkedMode变为false。这适用于较小的文件,任何超过1mb的视频Android手机崩溃。 (这就是他们默认打开chunkMode的原因)。

我们的问题是如何使用php读取上传的块数据? Apache中是否有设置需要打开以读取此数据?

4 个答案:

答案 0 :(得分:3)

在服务器端读取分块数据与非分块数据之间没有区别。它只是手机发送数据的方式(以8192字节为块,或者作为一个流)。

在网络上围绕这个功能有一个很多的喋喋不休,我个人发现整个文件上传解决方案有点不稳定,特别是对于较大的文件(例如视频文件)。

有些人报告它发生在大于4.8mb的文件上,在我的Android手机上它发生在8mb标记附近。

当我的应用程序上传文件并且没有附加文件时(这是连接错误3情况中发生的情况)我记录它,所以我可以看到有问题的手机。它也发生在iphone上(某些型号)。

如果你看到android日志发生的时候,你也可能会看到一个内存不足的异常。

这对您有何帮助?事实并非如此 - 但希望它有助于解释问题所在。不幸的是,除了对phonegap源代码做出贡献并重新编写文件传输方法之外,我们无能为力 -

出于兴趣,在手机上你遇到了问题,你可以用facebook上传大量文件,没有问题吗?然而,该应用程序正在上传文件肯定是phonegap 应该这样做的方式..

答案 1 :(得分:1)

我也遇到过这个问题。文件在iOS上传很好,因此服务器在那里处理chunkedMode,但在Android上,fileupload返回“3”表示连接错误。我在这里尝试了解决方案:Phonegap : FileTransfer.upload() fails on Android,但也没有运气。

答案 2 :(得分:1)

它最终成为网络服务器问题。 Apache需要配置为支持分块模式。另请注意,NGNIX默认情况下不支持分块模式,您需要安装模块http://wiki.nginx.org/HttpChunkinModule

答案 3 :(得分:0)

另一个奇怪的观察。我将50MB视频文件上传到了错误的网址。它无处可去,但是Android将它的轮子旋转了几分钟并触发了成功的回调。没有错误3并且没有崩溃。一旦我修正了拼写错误并提交到正确的URL,我就收到了错误3.