如何从PhoneGaps File Transfer API检索POST数据

时间:2012-12-13 13:00:26

标签: php cordova file-upload slim

我正在使用Phone Gaps(Cordova 2.1)文件传输API将用户照片库中的图像发布到我的服务器。文件传输API似乎工作正常。我只是对在我的服务器上检索这些信息感到困惑。

理想情况下,我需要做的是检索图像然后将其上传到我的服务器。但是,我似乎无法从文件传输中检索任何信息?

我的JavaScript代码(发布图片数据)是:

function onDeviceReady() {

            // Retrieve image file location from specified source
            navigator.camera.getPicture(uploadPhoto,
                                        function(message) { alert('get picture failed'); },
                                        { quality: 50, 
                                        destinationType: navigator.camera.DestinationType.FILE_URI,
                                        sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY }
                                        );

        }

        function uploadPhoto(imageURI) {
            var options = new FileUploadOptions();
            options.fileKey="file";
            options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1);
            options.mimeType="image/jpeg";

            var params = {};
            params.value1 = "test";
            params.value2 = "param";

            options.params = params;

            var ft = new FileTransfer();
            ft.upload(imageURI, encodeURI("http://some.server.com/upload.php"), win, fail, options);
        }

        function win(r) {
            console.log("Code = " + r.responseCode);
            console.log("Response = " + r.response);
            console.log("Sent = " + r.bytesSent);
        }

        function fail(error) {
            alert("An error has occurred: Code = " + error.code);
            console.log("upload error source " + error.source);
            console.log("upload error target " + error.target);
        }

我的服务器端代码是:

 $paramValue = $_POST['fileKey']; //Undefined variable
 $paramValue2 = $_POST['options']; //Undefined variable
$paramValue3 = $paramValue2['fileKey'] //Undefined variable

我也试过了:

//POST variable
$paramValue = $_POST['params'];
echo "Param Value1: " . $paramValue['value1']; //Should return "test"

我也试过了:

//POST variable
$paramValue = $_POST['options'];
echo "Param Value1: " . $paramValue['options']['params']['value1']; //Should return "test"

我得到的是未定义的变量错误?

非常感谢任何帮助,谢谢!

3 个答案:

答案 0 :(得分:20)

http://some.server.com上您可以拥有/var/www/目录,在此目录中您需要upload.php,此目录中的代码应将您的图像移动到文件夹

/var/www/TEST/

<?php
   print_r($_FILES);
   $new_image_name = "YEAH.jpg";
   move_uploaded_file($_FILES["file"]["tmp_name"], "/var/www/TEST/".$new_image_name);
?>

这是你需要的唯一额外的东西。

先决条件:

http://some.server.com

上的XAMPP LAMP WAMP或MAMP

为清楚起见,这是JavaScript和HTML,只是为了向您展示我的upload.php文件如何适合: 在你脑海里

<script type="text/javascript" charset="utf-8">

// Wait for PhoneGap to load
document.addEventListener("deviceready", onDeviceReady, false);

// PhoneGap is ready
function onDeviceReady() {
    console.log("device ready");
    // Do cool things here...
}

function getImage() {
    // Retrieve image file location from specified source
    navigator.camera.getPicture(uploadPhoto, function(message) {
                alert('get picture failed');
            },{
                quality: 50,
                destinationType: navigator.camera.DestinationType.FILE_URI,
                sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY
            }
    );

}

function uploadPhoto(imageURI) {
    var options = new FileUploadOptions();
    options.fileKey="file";
    options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1);
    options.mimeType="image/jpeg";

    var params = new Object();
    params.value1 = "test";
    params.value2 = "param";

    options.params = params;
    options.chunkedMode = false;

    var ft = new FileTransfer();
    ft.upload(imageURI, "http://some.server.com/TEST/upload.php", win, fail, options);
}

function win(r) {
    console.log("Code = " + r.responseCode.toString()+"\n");
    console.log("Response = " + r.response.toString()+"\n");
    console.log("Sent = " + r.bytesSent.toString()+"\n");
    alert("Code Slayer!!!");
}

function fail(error) {
    alert("An error has occurred: Code = " + error.code);
}

</script>

</head>

这就是我身体里的东西

<button onclick="getImage();">Upload a Photo</button>

答案 1 :(得分:12)

经常被忽视的另一件事: 本节关于客户端js文件:

options.fileKey="file";

必须在服务器端匹配此部分:

$_FILES["file"]

否则,您将收到一个不会指向此事实的错误。 对某些人来说这听起来可能很明显,但它可以为其他人节省一两个小时的毛发。

答案 2 :(得分:10)

要访问参数值,请直接将其作为POST访问。例如

服务器端:echo "Param Value1: " . $_POST['value1']; //will return "test" as output.