2013-10-08 48 views
0

我想從Worklight V6應用程序使用HTTP適配器將圖像(作爲表單的一部分)發佈到PHP服務器。圖片base64編碼使用worklight http適配器適當的格式發佈圖像

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代碼或我的worklight客戶端代碼。提前感謝您的任何建議。

JT

+0

大衛D救了我。在適配器代碼中,我有 var formData = encodeURI(imageData);我們將其更改爲 var image2Data =「image ='」+ encodeURIComponent(inputData.image)+「'」; 這裏的想法是,base64編碼的字符串可以有1或2個拖尾=「s」來填充偶數。 encodeURI不編碼='s,所以那些在從適配器到我的PHP服務器的轉換中迷路了。 另外,正如Dave上面所寫,我需要去掉base64編碼數據前面的「data:image/jpeg; base64」。謝謝大衛! –

回答

2

我認爲這個問題是 「數據:圖像/ JPEG; BASE64,」 在編碼數據中的BASE64的前部。將映像發送到不帶該前綴的適配器,或者在發佈到服務之前將其剝離。

0

大衛D救了我。在適配器代碼,我不得不

var formData = encodeURI(imageData); 

爲了讓代碼工作,我們把它改成

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

VAR輸入= { 方法: '後', returnedContentType: 'HTML', 路徑:路徑,

體:{ 「的contentType」: 「應用程序/ x WWW的形式進行了urlencoded」,

'content' : imageData 

} 

這裏的想法是,base64編碼的字符串可以有1或2個尾隨號碼來填充偶數。 encodeURI不編碼='s,所以那些在從適配器到我的PHP服務器的轉換中迷路了。

同樣,Dave在上面寫道,我需要去掉base64編碼數據前面的「data:image/jpeg; base64」。謝謝大衛!

相關問題