2013-03-06 126 views
3

我试图将画布图像保存到我的服务器中的文件夹,但检查时该文件为空。我使用AJAX将编码的数据传递给我的PHP脚本,然后PHP脚本将其保存到服务器,为空。试图将base64(图像)文件保存到服务器,它是空的

这是我的代码有:

JS/AJAX:

function convertCanvasToImage(thecanvas) { 
       var ajax = new XMLHttpRequest(); 
       ajax.open("POST",'testSave.php',false); 
       ajax.setRequestHeader('Content-Type', 'application/upload'); 
       ajax.send(canvasData); 
      } 

PHP(testSave.php):

$imageData=$GLOBALS['HTTP_RAW_POST_DATA']; 

    $filteredData=substr($imageData, strpos($imageData, ",")+1); 

    $unencodedData= base64_decode($filteredData); 

    //echo "unencodedData".$unencodedData; 

    $fp = fopen('test.png', 'wb'); 
    fwrite($fp, $unencodedData); 
    fclose($fp); 

感谢您的帮助提前!

+2

你是否检查'$ imageData'实际上是否有任何内容,然后通过substr/base64填充它?只是因为你在php中得到一个空文件并不意味着它是php的错。毕竟,你的ajax调用使用'canvasdata',但是你没有在你的代码片段中定义它,所以你可能会发送一个javascript null/undefined。 – 2013-03-06 22:12:20

+0

当'HTTP_RAW_POST_DATA'未被填充时(取决于php.ini设置),然后从虚拟文件名'php:// input'中读取。 – mario 2013-03-06 22:16:30

+2

尝试从'php:// input'读取数据,即'$ imageData = file_get_contents(“php:// input”);' – Musa 2013-03-06 22:17:43

回答

1

您在函数中缺少一条线来将<canvas>转换为使用.toDataURL()函数的数据。

function convertCanvasToImage(thecanvas) { 
    var canvasData = thecanvas.toDataURL('image/png'), //add this 
     ajax = new XMLHttpRequest(); 
    ajax.open('POST', 'testSave.php', false); 
    ajax.setRequestHeader('Content-Type', 'application/upload'); 
    ajax.send(canvasData); 
}; 

var thecanvas = document.getElementById('canvasId'); 
convertCanvasToImage(thecanvas); 
+0

whats“thecanvas”? – themis 2013-09-17 20:04:20

+0

@themis我更新以使其更清楚。这是一个DOM画布对象。 – ThinkingStiff 2013-09-17 20:28:26

相关问题