使用worklight http适当格式发布图像

时间:2013-10-08 13:55:55

标签: php image adapter ibm-mobilefirst urlencode

我正在尝试使用HTTP适配器从Worklight V6应用程序将图像(作为表单的一部分)发布到PHP服务器。图像是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适配器中,我将表格数据编码并发送给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

2 个答案:

答案 0 :(得分:2)

我认为问题是base64编码数据前面的“data:image / jpeg; base64”。将图像发送到没有该前缀的适配器,或者在发布到服务之前在适配器中将其剥离。

答案 1 :(得分:0)

大卫D救了我。在适配器代码中,我有

var formData = encodeURI(imageData);

要使代码生效,我们将其更改为

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

var input = {     方法:'post',     returnedContentType:'html',     路径:路径,

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

    'content' : imageData

}

这里的想法是base64编码的字符串可以有1或2个trailing ='来填充为偶数。 encodeURI没有编码='s因此从适配器到我的PHP服务器的转换中丢失了。

正如Dave在上面写的那样,我需要在base64编码数据的前面去掉“data:image / jpeg; base64”。谢谢大卫!!!