简体   繁体   中英

Can't read php file when upload image to server in titanium

I have tried to get the image from gallery and upload the selected image to server using webservices in titanium.

I have used below code. But am getting the debug error : HTTP error And also it shows the alert box like "There was an error during the connection"

This code is working fine in my development server.But it is not working in my client server. What's the reason ? why my code is not working in my client server ?

The file upload is working fine when upload the file from android device.But it's not working while upload a file from iphone device.Can you please give me a idea to resolve this issue ?

Why am getting this error on my console window.

 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]
});
}

EDIT:

this is php file :

    <?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;
}

?>

EDIT:

As am getting the below error :

: [DEBUG] HTTP error : [INFO] IN ERROR {"type":"error","source":{"cache":false},"code":404,"error":"HTTP error","success":false}

if i have call the same url and pass a manager_id alone , am getting the results fine.if i have passing the manager_id and file, this time only am getting the Http error. i can't find a exact issue.Because the same titanium code and php code (development server)is working fine and the image is uploading to development server folder. but i have moved the same php file to my client server.now it is not working . also the same web service url is working fine in browser and android.it's not working in iphone only.so that exactly i can't find where is the issue ? can you please give me a solutions.

EDIT : please refer the below link:

http://developer.appcelerator.com/question/174462/image-not-uploading-from-iphone#comment-224007

I have facing a exact same issue.could you please give me a solution.

i have found many questions like this (eg The 'Passive' connection '<appname>' access to protected services is denied ).

the answer is always:
"This error is what's known as a "Red Herring". It's a clue that's misleading. The HID isn't a real error that affects your app. There should be other messages that may indicate what's going on." so look if there is a other error massege which describes your problem.

for example try to escape the filename you are using within the sql statements:

$file_name = mysql_real_escape_string($data['file_name']);

Make sure your device is connected to the internet and then try it like this:

Titanium:

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"; 
    }
?>

For more info check this link: http://code.tutsplus.com/tutorials/titanium-mobile-build-an-image-uploader--mobile-8860

If it works like this you will have to add your logic again (resizing and manager_id)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM