изображение с изображениями, используя собственный формат http-адаптера

Я пытаюсь отправить изображение (как часть формы) на сервер PHP из приложения Worklight V6 с помощью адаптера HTTP. Изображение закодировано в base64

navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 8, destinationType: navigator.camera.DestinationType.DATA_URL }); 

.. позже в коде

 $('#myImageImg').attr('src', "data:image/jpeg;base64," + imageData); 

Я отправляю изображение на адаптер

 var img = $('#myImageImg').attr('src'); var formData = {"someField" : name, "image" : img }; var invocationData = { adapter : 'emailAdapter', procedure : 'sendEmail', parameters : [ formData ] }; var options = { onSuccess : sendEmailOK, onFailure : sendEmailFail, invocationContext : {} }; $.mobile.showPageLoadingMsg(); WL.Client.invokeProcedure(invocationData,options); 

В моем адаптере HTTP я uriencode данные формы и отправить его x-www-form-urlencoded

 function sendEmail(inputData) { var uri = 'myStuff/sendEmail.php'; var imageData="image='" + inputData.image+"'"; var formData = encodeURI(imageData); var input = { method : 'post', returnedContentType : 'html', path : path, body: { "contentType" : "application/x-www-form-urlencoded", 'content' : formData } 

Когда я дешифрую данные и сохраняю их в файле с помощью моего php-сервера, средство просмотра фотографий Windows отображает сообщение об ошибке «Средство просмотра фотографий Windows не может открыть это изображение, потому что файл выглядит поврежденным, поврежденным или слишком большим».

Я новичок php, но вот PHP-код, который я использовал

 <?php $image = $_POST['image'] $decoded=base64_decode($image); file_put_contents('C:\apache\htdocs\myStuff\newImage.JPG',$decoded); 

Я уверен, что я делаю какую-то глупую ошибку начинающего, но я не уверен, что это код моего адаптера, php-код или код моего клиентского кода. Заранее благодарю вас за любые предложения.

JT

Я думаю, что проблема заключается в «данных: image / jpeg; base64», в начале кодированных данных base64. Либо отправьте изображение на адаптер без префикса, либо отключите его в адаптере перед отправкой в ​​службу.

Дэвид Д спас меня. В коде адаптера я

 var formData = encodeURI(imageData); 

Чтобы заставить код работать, мы изменили его на

 var imageData = "image='" + encodeURIComponent(inputData.image)+"'"; 

var input = {метод: 'post', returnContentType: 'html', путь: путь,

body: {"contentType": "application / x-www-form-urlencoded",

  'content' : imageData } 

Мысль здесь состоит в том, что строки, закодированные в base64, могут иметь 1 или 2 трейлинг =, чтобы выровнять четное число. encodeURI не кодирует =, так что они терялись при переводе с адаптера на мой PHP-сервер.

Кроме того, как писал Дейв выше, мне нужно было вырезать «data: image / jpeg; base64» в начале кодированных данных base64. Спасибо, Дэвид !!!