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