4
votes

I'm trying to save the canvas image to the server. I can save the file, but it's always 0 bytes. What's wrong with my code?

<script>
function test(){
var canvas  = document.getElementById("cvs");
var dataURL = canvas.toDataURL();

$.ajax({
  type: "POST",
  url: "upload.php",
  data: { 
     imgBase64: dataURL
  }
}).done(function(o) {
  console.log('saved'); 

});

}
</script>

php:

<?php    
define('UPLOAD_DIR', 'uploads/');
$img = $_POST['img'];
$img = str_replace('data:image/png;base64,', '', $img);
$img = str_replace(' ', '+', $img);
$data = base64_decode($img);
$file = UPLOAD_DIR . uniqid() . '.png';
$success = file_put_contents($file, $data);
print $success ? $file : 'Unable to save the file.';
?> 
1
Where do you paint to your canvas - NatureShade
I'm not really sure what you mean. I paint it on the same page as the javascript above. - user3080392
That's the link where I figured out how to get what I have. The problem is, when I follow those directions, I get the 0 bytes. - user3080392

1 Answers

5
votes

First you have to be sure that you have painted to the canvas after you defined the canvas variable and before you created the dataURL

Second, it seems like you are looking for img in this php line:

$img = $_POST['img'];

but in your javascript you are defining it as imgBase64 in:

data: { 
   imgBase64: dataURL
}

lastly you should be adding console.log(dataURL) after the dataURL has been created to be sure that there is anything in it.