我使用ajax查询来上传画布图像数据,以及其他一些变量。下面是客户端的相关代码:
front_content = document.getElementById("front_paint_canvas").toDataURL("image/png");
ajaxHandler.open("POST", "upload_card", true);
ajaxHandler.setRequestHeader("Content-type","application/x-www-form-urlencoded");
ajaxHandler.send("name="+name+"&front_content="+front_content);
服务器端是这样的:
$front_content = substr($_POST['front_content'], strpos($_POST['front_content'], ",")+1);
$decodedData=base64_decode($front_content);
$fp = fopen( getcwd().'/assets/img/canvas.png', 'wb' );
fwrite( $fp, $decodedData);
fclose( $fp );
这将创建一个看起来大小和尺寸都正确的文件。但是,该文件是空白的。画布中的图像数据没有显示出来。这里做错了什么?
当使用jQuery.post()时,请参阅:http://api.jquery.com/jQuery.post/"application/x-www-form-urlencoded"的内容类型是不需要的:
javascript: // save canvas image as data url (png format by default)
var dataURL = canvas.toDataURL();
$.post("canvasdata.php", { data: dataURL } );
php: //参见:如何保存html5 Canvas。
toDataURl字符串作为png在php后端 file_put_contents('test.png', base64_decode(substr($_POST['data'], strpos($_POST['data'], ",")+1)));
如果你不使用jquery,使用这个:
// save canvas image as data url (png format by default)
var dataURL = canvas.toDataURL();
//$.post("canvasdata.php", { data: dataURL } );
var ajaxHandler = new XMLHttpRequest();
ajaxHandler.open("POST", "canvasdata.php", true);
//ajaxHandler.setRequestHeader("Content-type","application/x-www-form-urlencoded");
//ajaxHandler.send("name=test&data="+dataURL);
var formData = new FormData();
formData.append("name", "test");
formData.append("data", dataURL);
ajaxHandler.send(formData);