从数据库中恢复后解码base64映像失败

时间:2016-07-23 10:12:35

标签: javascript jquery html mysql cordova

可能很容易。但我无法弄明白。 我正在使用cordova相机插件,它给我直接base64数据如下..

navigator.camera.getPicture(onSuccess, onFail, {quality: 50,
    destinationType: Camera.DestinationType.DATA_URL});

function onSuccess(imageData) {
    $('#userFullProfileImage').attr('src', "data:image/jpeg;base64," + imageData);
}

它正在发挥作用。因为它在设置 userFullProfileImage的来源后显示了我的图像。所以编码是正确的。

现在,我正在尝试在mysql中保存 imageData 并通过ajax检索它。

检索后我匹配几行,发现没有错。保存前的 imageData 和检索后的 imageData 在我看来相同(但保存数据省略所有 + 字符)

检索到的图像数据无法解码。我也使用在线base64解码器。但没有希望。可能缺少 + 字符是出于这个原因。

我已逐行检查了所有其他字符, imageData 都相同。

所以现在帮助我,这可能是我个案的可能原因。

2 个答案:

答案 0 :(得分:1)

如果你的+字符被剥离,听起来好像它正在经历一个URL编码方案,它可以将+转换为空格,然后可以被base64解码器忽略为空格。这可能是您的AJAX请求的一部分,默认为application / x-www-form-urlencoded。

如果您说您要提交网址编码数据,那么请不要对其进行编码,服务器在收到时会对其进行错误解码。

尝试在AJAX请求中设置您的内容类型,例如

$.post({
    url: yourUrl,
    data: JSON.stringify(yourBase64string),
    contentType: "application/json",
    dataType: "json"
});

其中contentType将告诉服务器您将数据作为JSON提交,而dataType将告诉服务器您期望响应的格式(因此在这种情况下服务器应以JSON发送其响应,但是你也可以使用例如" text")

的dataType

您也可以使用" text / plain"的contentType。并删除JSON.stringify但我没有测试过。

答案 1 :(得分:0)

我的问题是在通过ajax发送图像数据期间。

encodeURIComponent(imageData); //This solve my problem.

编码数据现在可以安全地保存在数据库中。

从数据库中的编码数据中检索后,我刚刚使用了另一个函数。

decodeURIComponent(encodedData); //same of imageData