Как сохранить изображение на холсте Kineticjs в базу данных?

0

У меня есть холст

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 );

Как сохранить данныеURL в моей базе данных?

  • 0
    Сохранение файла в базу данных является плохой практикой. Сохраните файл на диск под любым именем (мне нравится sha1() содержимое файла и используйте его), а затем сохраните путь к базе данных.
Теги:
kineticjs

2 ответа

5
Лучший ответ

Теперь вы пишете прямо в файловую систему сервера, всегда используя "image.png" в качестве своего имени (я предполагаю, что это тестовый сайт, а не производственный).

Если вы хотите сохранить содержимое изображения в БД, вам необходимо:

  1. Создайте базу данных, используя механизм БД, который вы собираетесь использовать
  2. Создайте таблицу и добавьте тип BLOB для хранения содержимого изображения. Вы также можете получить поле с автоматическим инкрементным идентификатором, чтобы впоследствии вы могли получить изображение, используя его значение 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 необходим для правильного 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 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
    спасибо большое, сэр
  • 0
    Эй, я могу добавить данные в базу данных сейчас, но я не могу показать данные в изображение / PNG. ты можешь помочь?
Показать ещё 4 комментария
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
    Спасибо, сэр :)))))

Ещё вопросы

Сообщество Overcoder
Наверх
Меню