Я использую 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"
Все, что я получаю, это неопределенные переменные ошибки?
Любая помощь будет очень признательна, спасибо!
На 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); ?>
Это единственное, что вам нужно.
Необходимое условие:
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>
Еще одна вещь, которая часто упускается из виду: этот раздел в файле js клиента:
options.fileKey="file";
Должна соответствовать этой части на стороне сервера:
$_FILES["file"]
В противном случае вы получите сообщение об ошибке, которое не указывает на этот факт. Это может показаться очевидным для некоторых, но это может спасти других через час или два от вытягивания волос.
Для доступа к значениям параметров обращайтесь к ним как к POST напрямую. Например, для
Серверная сторона: echo "Param Value1: " . $_POST['value1']; //will return "test" as output.
echo "Param Value1: " . $_POST['value1']; //will return "test" as output.