Невозможно загрузить видеофайл размером более 500 КБ на сервер Linux в Android

Я пытаюсь загрузить видеофайл с эмулятора Android, Genymotion и мобильного устройства в Titanium Appcelerator.

Я получаю успех, когда я загружаю небольшие файлы, захватив с эмулятора около 200-300 КБ, работает нормально. его загрузка и получение ответа от сервера.

Когда я пытаюсь загрузить файл размером 3-5 МБ, я не получаю ответ от сервера.
Иногда я получаю ответ слишком поздно через 2-4 минуты, и файл был загружен в то время. Но часто его не загружается и не получает ответ больше.

Я попробовал другой код, размещенный в сети, но не получил 100% удачи.

В журнале для потока данных я вижу процесс 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-приложение для загрузки файлов на сервер

Работает отлично.

Кто-нибудь может знать, почему ответ занимает слишком много времени? или дайте мне знать, если я что-то забыл.

Я работаю над

Студия Appcelerator, сборка: 4.5.0.201602170821
Titanium SDK 5.2.2.GA
Сплав Проект
Mac OS X El Capitan
Версия 10.11.4

3

Решение

К сожалению, прогресс onsendstream () на Android просто неправильный (слишком быстрый). Я уже сообщал об этом как об ошибке здесь:

https://jira.appcelerator.org/browse/TIMOB-20483

Может быть, вас просто смущает обратный вызов sendstream, и ваш код в порядке?

1

Другие решения

Других решений пока нет …