使用文件传输上传大于15mb的视频时,Phonegap崩溃

时间:2012-01-20 10:36:20

标签: android video upload cordova crash

在Android,三星Galaxy S,phonegap版本:1.3.0

上测试

我正在为社区构建基于用户的视频上传器。

所有使用小于15 mb(大致)文件的尝试都像魅力一样 如果从库中选择文件或录制视频和 然后上传它。

我已经在两台不同的服务器上尝试了这个,并且设置了php ini 超出要求。 我试过chunkedMode = false;

问题仍然存在,如果视频大于15,则手机屏幕崩溃 MB。所有15 MB以下的文件都运行良好。

Phonegap甚至没有返回错误,它只是崩溃了。 我尝试过试试catch语句但没有成功。

这是我的代码(非常基本用于测试目的):

<!DOCTYPE html>
<html>
  <head>
    <title>Video Uploader</title>
    <meta name="viewport" content="width=device-width, initial-
scale=1">
    <link rel="stylesheet" href="master.css" type="text/css" />
    <script type="text/javascript" charset="utf-8"
src="phonegap-1.3.0.js"></script>
    <script type="text/javascript" charset="utf-8">
        function onLoad() {
        document.addEventListener("deviceready",onDeviceReady,false);
    }
        function onDeviceReady() {
                pictureSource=navigator.camera.PictureSourceType;
            destinationType=navigator.camera.DestinationType;
    }
    function uploadFile(mediaFile,method) {
                var ft = new FileTransfer(),
            path = mediaFile,
            name = "video.3gp";
        var options = new FileUploadOptions();
                options.chunkedMode = false;
                        options.fileKey = "file";
                        options.fileName = name;
                        options.mimeType = "video/mpeg";
        ft.upload(path,
            "http://www.myserver.com/upload.php",
            function(r) {
                        alert('Success ' + r.response);
            },
            function(error) {
                        alert('Error ' + path + ': ' + error.code);
            },
            options);
    }
    function onPhotoURISuccess(imageURI) {
                uploadFile(imageURI,"library");
    }
    function getVideo(source, type) {
            navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality:
50, destinationType: destinationType.FILE_URI, sourceType: source,
mediaType: type});
    }
    function onFail(message) {
        alert('Error');
    }
    </script>
  </head>
  <body onload="onLoad()">
        <button class="btn"
onclick="getVideo(pictureSource.PHOTOLIBRARY,Camera.MediaType.VIDEO);">Get
Video</button>
  </body>
</html>

对此有任何建议将不胜感激!

谢谢!

2 个答案:

答案 0 :(得分:4)

您需要设置

options.chunkedMode=true;

当chunked模式为false时,Android上的HTTP代码尝试在发送之前缓冲内存中的整个传输。在你的情况下更大的传输15 MB,但对于其他手机,它将更少,因为它们将具有更少的内存,这将导致抛出OutOfMemory异常。由于永远不会捕获OOME,因此应用程序将崩溃。

如果将chunked mode设置为true,则Android上的HTTP代码会尝试使用流模式将信息发送到服务器。并非所有服务器都支持流模式,但大多数都支持。

至于为什么它在40+ mb时失败,除非你的php.ini文件指定这是它接受的最大文件大小,否则我有点亏。

答案 1 :(得分:0)

您是否尝试在PHP脚本上打印出任何调试语句,只是为了查看出现了什么问题?

您的客户端代码看起来很好,我使用几乎相同的代码没有任何问题。我已经能够使用PhoneGap FileTransfer对象上传大约40MB的视频文件。

另一种选择可能是创建FileTransfer的副本作为自定义插件。然后,您可以在Java代码中放置一个断点,以查看出现了什么问题。

对不起,我不能再帮忙,因为它对我有用了!