我试图上传视频文件从android模拟器,genymotion和移动设备在钛appcelerator。
当我上传从模拟器捕获的大约200-300kb的小文件时,我获得了成功。它的上传和服务器的响应。
当我试图上传大约3-5MB的文件,然后我没有得到服务器的响应。
有时2-4分钟后我得到的回复太晚了,文件在那个时候被上传了。但它经常没有上传,也不再得到回应。
我尝试了在网上发布不同的代码,但没有100%的运气。
在on data stream的日志中,我可以看到进程0-1,但对于大文件,它的停止位置是.9999x,而不是1。

[INFO] :   ONSENDSTREAM - PROGRESS: 0.9998882582315288
[INFO] :   ONSENDSTREAM - PROGRESS: 0.9999253846335128
[INFO] :   ONSENDSTREAM - PROGRESS: 0.9999625110354967
[INFO] :   ONSENDSTREAM - PROGRESS: 0.9999996374374807

这是我的测试示例代码。
钛合金按键
var intent = Titanium.Android.createIntent({
    action : Ti.Android.ACTION_PICK,
    type : "video/*"
});

intent.addCategory(Ti.Android.CATEGORY_DEFAULT);

$.index.activity.startActivityForResult(intent, function(ei) {
    if (ei.error) {
        alert("Error");
    } else {
        var dataUri = ei.intent.data;

        var xhr = Titanium.Network.createHTTPClient(/*{enableKeepAlive:false}*/);
        xhr.setTimeout(1000 * 60 * 5);
        xhr.open('POST', 'http://gaurangchhatbar.in/ws/apitest/videouploadcode.php');
        xhr.setRequestHeader("enctype", "multipart/form-data");
        xhr.setRequestHeader('Cache-Control', 'no-cache');
        xhr.onerror = function(ex) {
            alert(ex.error);
        };
        xhr.onload = function() {
            alert(this.responseText);
        };
        xhr.onsendstream = function(ex) {
            Ti.API.info('ONSENDSTREAM - PROGRESS: ' + ex.progress);
        };
        var filename = "UploadedFile-" + (new Date()).toString();
        filename = filename.replace(/\./g,"-");
        filename = filename.replace(/\:/g,"-") + ".mp4";
        Ti.API.info(filename);
        var source = Ti.Filesystem.getFile(dataUri);
        var fileData = Ti.Filesystem.getFile(Ti.Filesystem.getApplicationDataDirectory(), filename);

        source.copy(fileData.nativePath);
        if (fileData.exists()) {
            var fileContent = fileData.read();
            if (fileContent)
                xhr.send({
                    video_path : fileContent,
                    action : "uploadvideo"
                });
            else
                alert('Did not get any data back from file content');
        } else
            alert('Did not get a file data for : ' + dataUri);
    }
});

PHP代码
$target_path = "video/";
$target_path = $target_path . basename( $_FILES['video_path']['name']);

if(move_uploaded_file($_FILES['video_path']['tmp_name'], $target_path)) {
    return "success";
} else{
    return "falied!";
}

我尝试了本机android应用程序从链接上传文件:Android Native App for Upload File to Server
它工作得很好。
有人知道为什么反应要花太多时间吗?或者如果我忘了什么就告诉我。
我正在努力
Appcelerator工作室,建筑:4.5.0.201602170821
钛sdk 5.2.2.ga
合金项目
苹果操作系统x El Capitan
版本10.11.4

最佳答案

不幸的是,android上的onsendstream()进程是错误的(太快了)。我已经在这里报告了这个错误:
https://jira.appcelerator.org/browse/TIMOB-20483
可能是你被sendstream回调弄糊涂了,你的代码也没问题吧?

关于php - 无法将大于500kb的视频文件上传到Android中的Linux服务器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37229415/

10-10 20:15
查看更多