2013-03-08 52 views
1

我試圖創建一個圖像出我的畫布,但我似乎無法得到一個嘗試後,後端工作上傳的PNG。有人可以看看這裏發生了什麼嗎?通過jquery上傳toDataUrl圖像

我的javascript:

stage.toDataURL({ 
    callback: function(dataUrl) { 
     var imgURL = dataUrl; // keep the entire url 
     $.ajax({ 
      type: "POST", 
      url: "http://www.xxxx.nl/pointer/upload.php", 
      data: ({imgData : imgURL}), 
      cache: false, 
      success: function(result){ 
       //window.open(dataUrl); // Show result stage in a new window 
       alert(result); // show php error if exists 
      } 
     }); 
    } 
}); 

而且我很基本的.PHP現在:

$im = imagecreatefrompng($_POST['imgData']); 
header('Content-Type: image/png'); 
imagepng($im); 
imagedestroy($im); 

我的錯誤日誌:

[Fri Mar 08 11:29:16 2013] [error] [client 24.132.214.139] mod_security: Access denied with code 500. Error reading request body, error code 70007: The timeout specified has expired [hostname "www.ccc.nl"] [uri "/pointer/upload.php"] 
+0

你的JavaScript代碼是完全正常的。在PHP方面,您可以使用['DataUriUpload']附帶的[PHP-FileUpload](https://github.com/delight-im/PHP-FileUpload)(https://github.com/delight- IM/PHP的文件上傳/ BLOB/023f812226673ac9e0696d8a3579bb7380606dda/src目錄/ DataUriUpload.php)。它記錄在[這裏](https://github.com/delight-im/PHP-FileUpload/tree/023f812226673ac9e0696d8a3579bb7380606dda#data-uri-uploads)。或者,您可以查看其源代碼。 – caw 2017-12-04 23:53:13

回答

1

當你這樣做:

var canvasData = myCanvas.toDataURL("image/png"); 

你得到編碼的字符串表示.PNG以base64,像這樣:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AAAGB……… 

聲明本串的前綴與此頭:數據:圖像/ PNG; BASE64。這個頭文件是不需要/不被.png文件識別的 - 並且僞造imagecreatefrompng()。所以,當保存這個字符串來創建一個.png時,你必須去掉標題。在PHP端你可以做這樣的(雖然你可以或者剝離其關閉的客戶端):

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

然後繼續正常...