Как получить данные POST из API передачи файлов PhoneGaps - программирование
Подтвердить что ты не робот

Как получить данные POST из API передачи файлов PhoneGaps

Я использую API-интерфейсы для передачи файлов с телефона (Cordova 2.1), чтобы отправить изображение из библиотеки фотографий пользователей на мой сервер. 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"

Все, что я получаю, это переменные ошибки undefined?

Любая помощь будет очень признательна, спасибо!

4b9b3361

Ответ 1

В http://some.server.com у вас может быть ваша директория /var/www/, в этом каталоге вам необходимо загрузить download.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);
?>

Это единственное, что вам нужно.

Необходимое условие:

XAMPP LAMP WAMP или MAMP на http://some.server.com

Примите/повысьте, если это поможет.

Для ясности это 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>

и это то, что у меня в теле.

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

Ответ 2

Еще одна вещь, которая часто упускается из виду: Этот раздел в файле js клиента:

options.fileKey="file";

Соответствует этой части на стороне сервера:

$_FILES["file"]

В противном случае вы получите сообщение об ошибке, которое не указывает на этот факт. Это может показаться очевидным для некоторых, но это может спасти других через час или два от вытягивания волос.

Ответ 3

Для доступа к значениям параметров обращайтесь к ним как к POST напрямую. Например,

Серверная сторона: echo "Param Value1: " . $_POST['value1']; //will return "test" as output.