2013-10-08 47 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”。谢谢大卫!

相关问题