可能很容易。但我无法弄明白。 我正在使用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 都相同。
所以现在帮助我,这可能是我个案的可能原因。
答案 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