我想从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”。谢谢大卫! –