2015-02-23 128 views
0

我有一個帆布如何將Kineticjs畫布上的圖像保存到數據庫?

function initStage(images) { 

    var stage = new Kinetic.Stage({ 
     container: "container", 
     width: 550, 
     height: 550 
    }); 

和保存按鈕

$('#save').click(function() { 

    stage.toDataURL(function(dataUrl) { 
    $.ajax("ajax.php", { data: dataUrl }, 

    function(data) { 
     alert("Your Design Was Saved To The Server"); 
    }); }); }); 

和ajax.php

$png =$_POST['data']; 
$filteredData=substr($png, strpos($png, ",")+1); 
$unencodedData=base64_decode($filteredData); 
$fp = fopen('image.png', 'wb'); 
fwrite($fp, $unencodedData); 
fclose($fp); 

如何保存dataURL到我的數據庫?

+0

將文件保存到數據庫壞的做法。將文件以任何名稱存儲到磁盤(我喜歡'sha1()'文件的內容,並使用它),然後將路徑保存到數據庫 – 2015-02-24 13:36:30

回答

5

您現在正在直接寫入服務器的文件系統,始終使用'image.png'作爲其名稱(我假設這是一個測試網站,而不是生產網站)。

如果你婉圖像內容保存到數據庫,你必須:

  1. 創建一個數據庫,利用數據庫引擎,你要使用
  2. 創建一個表並添加BLOB類型用於存儲圖像的內容。您可能還想獲取自動遞增的ID字段,以便稍後可以使用其ID值檢索圖像。實際的表是這樣的: CREATE TABLE image_table(ID INTEGER AUTO_INCREMENT, IMAGE BLOB, PRIMARY KEY (ID)) ENGINE=InnoDB;
  3. 連接到數據庫使用您要使用
  4. 執行INSERT SQL語句,傳遞$_POST['data']內容作爲參數的憑據。

$connection = @mysqli_connect('database_hostname','database_username', 
       'database_password','database_databasename'); 
mysqli_query($connection ,"INSERT INTO image_table VALUES(NULL, '". 
mysqli_real_escape_string($connection , $_POST['data']) ."')"); 

的調用mysqli_real_escape_string要正確逃生用JS腳本發送的數據,以便SQL查詢中也不會造成麻煩。

如果你想從數據庫中檢索圖像,你必須使用一個SELECT類型的查詢,如SELECT ID, IMAGE FROM image_table WHERE ID='".intval(ID)."';"

一旦你從數據庫中的圖像,你可以使用這樣的送它的瀏覽器:

//get the data from the database somehow (mysql query et al.) 
//let's assume data retrieved from the DB is in $data 
header('Content-Type: image/png');//alter for png/gif/etc. 
echo $data['IMAGE']; 

在HTML頁面中,你會使用這樣

<img src="/myimagescript.php?id=ID"> 
+0

非常感謝你先生 – 2015-02-24 06:47:42

+0

嘿,我現在可以將數據添加到數據庫,但我無法將數據顯示到圖像/ png中。你可以幫忙嗎? – 2015-02-24 07:20:28

+0

我編輯了包含這個新請求的答案。 – imelgrat 2015-02-24 12:15:20

1

你不說你正在使用哪個數據庫。也許MySQL因爲你使用PHP?

這裏有一個例子開始你的dataUrl字符串保存到MySQL數據庫:

$conn = new PDO('mysql:host=myHost;dbname=myDatabase', "myUser", "myPassword"); 

// INSERT with named parameters 
$stmt = $conn->prepare("INSERT INTO myTable(myImageColumnName)VALUES(:theImage)"); 
$stmt->bindValue(":theImage",$unencodedData); 
$stmt->execute(); 
$affected_rows = $stmt->rowCount(); 
echo $affected_rows; 

當然,所有的例子my...必須由實際的數據庫值來代替。

+0

謝謝:)))) – 2015-02-24 06:47:20