I've created a canvas via jQuery and need to save it back to the public file directory as an image, so I can access it like any other image. I can create the file and save it, into the same file location as my save.php script, but unable to save it to the public file directory... var canvas = document.getElementById('myCanvas'); var dataURL = canvas.toDataURL("image/png"); $.ajax({ type: "POST", url: Drupal.settings.basePath + "mypath/save.php", data: { imgBase64: dataURL } }) Then the following php as called in save.php: $img = $_POST['imgBase64']; $img = str_replace('data:image/png;base64,', '', $img); $img = str_replace(' ', '+', $img); $fileData = base64_decode($img); $fileName = 'public://' . uniqid() . 'myCanvas.png'; file_put_contents($fileName, $fileData); excluding `'public://' .` will happily save to the location specified in `Drupal.settings.basePath + "mypath/..."`, but I'm unable to tell it to save to the public directory or even any directory structure...