【问题标题】:How do i save a canvas and then uploading it to a sql database by using ajax and php如何保存画布,然后使用 ajax 和 php 将其上传到 sql 数据库
【发布时间】:2014-01-17 17:08:59
【问题描述】:

我在画布中做了一个非常简单的绘画应用程序,现在我试图弄清楚如何保存画布(作为图像),然后将其上传到 sql 数据库(通过使用 php 和 jquery 和 javascript)。我已经阅读了许多关于如何做到这一点的谷歌页面,但我无法真正理解如何完全做到这一点。

我想出的是,我认为这是将画布制作成图像所需的代码。

var c=document.getElementById("myCanvas");    
var myImage = c.toDataURL("image/png");
    var image = document.getElementById("myCanvas");
    image.src = myImage; 

完成此操作后,我必须发送图像,我想使用 ajax 将图像发送到一个名为 action 的新文件。但问题是我不知道我应该拥有什么数据。

      $.ajax({
            type: "POST",
            url: "action.php",
            data: ??????????,
            success: function(msg){
                alert( "Data Saved: " + msg );
            }
        });     

在我将它发送到操作文件后,我必须将图像上传到数据库。当我在搜索时,我发现了一些叫做 blob 和 base64 的东西,但没有真正了解如何使用它们。

如我所见,存在三个问题: 1.将画布保存到图像中(我不确定我的代码是否正确) 2.通过ajax将图像发送到动作文件(主要问题是要知道要发送什么数据类型) 3. 从这个文件然后将图像发送到数据库,这里我不知道如何发送标准的东西,比如 CRUD(创建、读取、更新、删除)。例如:

 $sql = "INSERT INTO `div`(`ID`, `name`,) 
VALUES( 'ID' ,' " . $_POST["name"] . "')";

但我从互联网上读到的内容与这个简单的插入突击队不同。

我习惯于 php javascript 和 jquery。所以如果我用我可以阅读的语言理解它会更简单

【问题讨论】:

标签: php jquery ajax database canvas


【解决方案1】:

第一:

您需要将该画布制作为图像(canvas.toDataURL('canvasid')),然后使用replace 将其转换为八位字节流

      var image = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream");
//ajax call   
 $.ajax({
        url: "action.php",
       type: 'POST',
       contentType: 'application/octet-stream',  
       data: image,
       processData: false
    });

这将在 action.php 中抛出该八位字节流。现在您可以将此流保存在 mysql 中。就像您可以在 mysql 上保存的字符串(使用 varchar)一样,您可以使用数据类型 blob 来保存文件。您也可以将其像文件一样保存在服务器上。 其次:

要在 php 中保存该图像,您将需要 imagecreatefromstring 函数。像这样在 action.php 中使用它:

$image = imagecreatefromstring( $data );

这可能与您的问题非常相似:PHP create image from application/octet stream

【讨论】:

  • 我在你帮助我的时候做了改变。但是当我试图将信息发送到一个名为图像的数据库时,我输入了这个:$sql = "INSERT INTO 'images' ('image') VALUES (".$_POST["image"].")"; $stmt = $dbh->prepare($sql); $stmt->execute();,而数据库只包含 1 个东西。这就是图像。并且类型是blob。
  • 发生了什么事?看到这个进行blob插入(phpeveryday.com/articles/PDO-Working-With-BLOBs-P554.html)) 另外你为什么不将该流本身保存在数据库中?但据我所知,在 db 中保存图像是一个坏主意,请参阅:stackoverflow.com/a/17751976/1363495。接受我之前的回答吗?
  • 即使是小画布的 dataURL 也相当大,因此您可能会考虑使用实际数据而不是使数据库膨胀:(1) 将上传的图像存储到服务器目录和 (2) 将文件路径保存到MySQL 数据库中的图像。您的 DBA 会感谢您这样做!
猜你喜欢
  • 2015-08-16
  • 2014-09-22
  • 1970-01-01
  • 2018-05-23
  • 2011-11-05
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
相关资源
最近更新 更多