Я попытался получить изображение из галереи и загрузить выбранное изображение на сервер, используя веб-сервисы из титана.
Я использовал приведенный ниже код. Но я получаю ошибку отладки: ошибка HTTP, а также показывает окно с предупреждением типа «Произошла ошибка при подключении»
Этот код работает нормально на моем сервере разработки. Но он не работает на моем клиентском сервере. В чем причина ? почему мой код не работает на моем клиентском сервере?
Загрузка файла работает нормально при загрузке файла с устройства Android. Но она не работает при загрузке файла с устройства iphone. Можете ли вы дать мне идею, чтобы решить эту проблему?
Почему я получаю эту ошибку в моем окне консоли.
function AUF_ADD_File_FolderData () {
Titanium.Media.openPhotoGallery({
success:function(event) {
var request = Ti.Network.createHTTPClient({
onload : function(e) {
Ti.API.info(this.responseText);
Ti.API.info("image pathe"+" "+event.media);
if(this.responseText == "Successfully file is created"){
var managefolders =Alloy.createController('manage_folders').getView();
managefolders.open();
}
else{
alert(this.responseText);
}
},
onerror: function(e){
Ti.API.debug(e.error);
alert("There was an error during the connection");
},
timeout:20000,
});
var uploadabc = event.media.imageAsResized(400 , 400);
request.open("POST",url+"client/manager/at_manager_create_common_file.php");
var params = ({"manager_id": manager_id,"file": uploadabc,});
// var params = ({"manager_id": manager_id,"file": event.media,});
request.send(params);
},
cancel:function() {
// called when user cancels taking a picture
},
error:function(error) {
// called when there's an error
var a = Titanium.UI.createAlertDialog({title:'Camera'});
if (error.code == Titanium.Media.NO_CAMERA) {
a.setMessage('Please run this test on device');
} else {
a.setMessage('Unexpected error: ' + error.code);
}
a.show();
},
saveToPhotoGallery:false,
// allowEditing and mediaTypes are iOS-only settings
allowEditing:true,
mediaTypes:[Ti.Media.MEDIA_TYPE_VIDEO,Ti.Media.MEDIA_TYPE_PHOTO]
});
}
РЕДАКТИРОВАТЬ:
это php файл:
<?php
$request = base64_decode($_POST['jsondata']);
$data = json_decode($request,true);
$manager_id = $data['manager_id'];
$file_name = $data['file_name'];
$source = base64_decode($data['source']);
include "db_connect.php";
// connecting to db
$db = new DB_CONNECT();
$result = mysql_query("SELECT * from at_common_files WHERE user_id = '$manager_id' and file_name = '$file_name'");
$no_of_rows = mysql_num_rows($result);
if ($no_of_rows > 0) {
$response='{"Error":"1","Message":"Filename already existed"}';
echo $response;
} else {
$upload_dir = 'common_files/'.$manager_id."_".$file_name;
file_put_contents($upload_dir,$source);
$qugery = mysql_query("insert into at_common_files (user_id,file_name) values ($manager_id, '$file_name') ");
$response = '{"Error":"0","Message":"Successfully file is created"}';
echo $response;
}
?>
РЕДАКТИРОВАТЬ:
Как я получаю ошибку ниже:
: [DEBUG] Ошибка HTTP
: [INFO] IN ERROR {«type»: «error», «source»: {«cache»: false}, «code»: 404, «error»: «HTTP error», «success»: false}
Если у меня есть тот же URL-адрес и передать только manager_id, я получаю результаты нормально. Если я передаю manager_id и файл, на этот раз только ошибка Http. Я не могу найти точную проблему. Потому что один и тот же титановый код и php-код (сервер разработки) работают нормально, и изображение загружается в папку сервера разработки. но я переместил тот же файл php на мой клиентский сервер. Теперь он не работает. также тот же URL-адрес веб-службы работает нормально в браузере и android.it не работает только в iphone. так что я точно не могу найти, где проблема? Можете ли вы дать мне решение.
РЕДАКТИРОВАТЬ :
пожалуйста, обратитесь по ссылке ниже:
http://developer.appcelerator.com/question/174462/image-not-uploading-from-iphone#comment-224007
Я столкнулся с точно такой же проблемой. Не могли бы вы дать мне решение?
Я нашел много вопросов, как это (например, «Пассивное» соединение<Имя приложения>доступ к защищенным сервисам запрещен).
ответ всегда:
«Эта ошибка известна как« красная сельдь ». Это зацепка, которая вводит в заблуждение. HID не является реальной ошибкой, которая влияет на ваше приложение. Должны быть другие сообщения, которые могут указывать на то, что происходит». Так что смотрите, если есть другая ошибка, которая описывает вашу проблему.
например, попытайтесь экранировать имя файла, которое вы используете в инструкциях sql:
$file_name = mysql_real_escape_string($data['file_name']);
Убедитесь, что ваше устройство подключено к Интернету, а затем попробуйте так:
Титан:
function AUF_ADD_File_FolderData () {
Titanium.Media.openPhotoGallery({
success:function(event) {
var xhr = Titanium.Network.createHTTPClient();
xhr.onerror = function(e){
Ti.API.info('IN ERROR ' + JSON.stringify(e));
alert('Sorry, we could not upload your photo! Please try again.');
};
xhr.onload = function(){
Ti.API.info(this.responseText);
Ti.API.info("image pathe"+" "+event.media);
if(this.responseText == "Successfully file is created"){
var managefolders =Alloy.createController('manage_folders').getView();
managefolders.open();
}else{
alert(this.responseText);
}
};
xhr.open('POST', url+"client/manager/at_manager_create_common_file.php");
xhr.send({
media: event.media,
manager_id: manager_id
});
},
cancel:function() {
// called when user cancels taking a picture
},
error:function(error) {
// called when there's an error
var a = Titanium.UI.createAlertDialog({title:'Camera'});
if (error.code == Titanium.Media.NO_CAMERA) {
a.setMessage('Please run this test on device');
} else {
a.setMessage('Unexpected error: ' + error.code);
}
a.show();
},
saveToPhotoGallery:false,
// allowEditing and mediaTypes are iOS-only settings
allowEditing:true,
mediaTypes:[Ti.Media.MEDIA_TYPE_VIDEO,Ti.Media.MEDIA_TYPE_PHOTO]*/
});
}
PHP:
<?php
//this function returns a random 5-char filename with the jpg extension
function randomFileName()
{
$length = 5;
$characters = 'abcdefghijklmnopqrstuvwxyz';
$string = '';
for ($p = 0; $p < $length; $p++) {
$string .= $characters[mt_rand(0, strlen($characters))];
}
return $string . '.jpg';
}
//create the random filename string and uploads target variables
$randomString = randomFileName();
$target = 'common_files/'.$randomString;if(move_uploaded_file($_FILES['media']['tmp_name'], $target))
{
echo "success";
}
else
{
echo "moving to target failed";
}
?>
Для получения дополнительной информации проверьте эту ссылку: http://code.tutsplus.com/tutorials/titanium-mobile-build-an-image-uploader—mobile-8860
Если это работает так, вам придется снова добавить свою логику (resizing and manager_id)