【问题标题】:post image using worklight http adapter proper format使用 worklight http 适配器正确格式发布图像
【发布时间】:2013-10-08 13:55:54
【问题描述】:

我正在尝试使用 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 适配器中,我对表单数据进行 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 个尾随 = 来填充为偶数。 encodeURI 不编码 ='s 所以那些在从适配器到我的 PHP 服务器的翻译中丢失了。同样正如 Dave 上面所写,我需要去掉 base64 编码数据前面的“data:image/jpeg;base64”。谢谢大卫!!!

标签: php image adapter ibm-mobilefirst urlencode


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    var formData = encodeURI(imageData);
    

    为了让代码正常工作,我们将其更改为

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

    var 输入 = { 方法:'发布', 返回内容类型:'html', 路径:路径,

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

        'content' : imageData
    
    }
    

    这里的想法是,base64 编码的字符串可以有 1 或 2 个尾随 = 来填充为偶数。 encodeURI 没有对 = 进行编码,所以这些在从适配器到我的 PHP 服务器的翻译过程中丢失了。

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

    【讨论】:

      猜你喜欢
      • 2015-10-25
      • 2016-01-03
      • 1970-01-01
      • 1970-01-01
      • 2013-02-12
      • 1970-01-01
      • 2013-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多