我想通过 Jquery AJAX 在 php 脚本中发布 base64 图像文件。
我已经使用 Jquery 的 encodeURIComponent() 函数对其进行了编码,然后在发布数据时使用 php 上的 rawurldecode() 函数对其进行解码。
问题是,Php 无法将正确的图像保存为 png。
我已经比较了发布的base64数据和原始数据,它们不匹配。这使我得出结论,也许 base64 数据太大而无法发布。
我的结论是真的吗?如果是,还有其他方法可以成功发布base64数据吗?如果我错了,请您赐教吗?
这是 Jquery 脚本
var whereSignatureis = $('.signatureView');
// i got the image from a plugin called jSignature, assign it to a variable data.
var data = signPaper.jSignature("getData","image");
// created an image ddata from what the data returned for displaying purposes.
var ddata = new Image();
// the ddata.src is now the png base64 image
ddata.src = "data:" + data[0] + "," + data[1];
// I encoded the image with uricomponent for safe posting.
var theImg = encodeURIComponent(ddata.src);
// and posted the image
$.ajax({
type: "POST",
url: "processes.php",
data: {img: theImg},
contentType: "application/x-www-form-urlencoded;charset=UTF-8",
success: function(r){
whereSignatureis.append(r);
}
});
这是PHP
define('UPLOAD_DIR', '/images');
$img = rawurldecode($post->img);
$img = str_replace('data:image/png;base64,', '', $img);
$img = str_replace(' ', '+', $img);
$data = base64_decode($img);
$file = UPLOAD_DIR . 'signature' . '.png';
$success = file_put_contents($file, $data);
print $success ? "{$post->img}" : 'File not Saved.';
提前致谢!