2015-02-23 99 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