MySQLi. Upload and save image file as BLOB. PostFile. PostText

Hello friends,

In this tutorial we saw how we can save text in a MySQL database:
MySQLi. PHP. GET. POST. Insert. Update. Delete. Show. 000webhost

0.- Now we are going to upload an image file and save it as a BLOB in MySQL.

BLOB: Binary Large Object, it can store image, sound, video, pdf, video files…
There are several types:

  • TINYBLOB: Stores up to 255 bytes.
  • BLOB: Stores up to 65,535 bytes.
  • MEDIUMBLOB: Stores up to 16,777,215 bytes.
  • LONGBLOB: Stores up to 4,294,967,295 bytes.

We will use MEDIUMBLOB.

Using phpMyAdmin we create the table: dibujos with 4 columns (id, image, extension, name), note that the image column is of type mediumblob.

This tutorial in Spanish:
http://kio4.com/appinventor/366_mysql_blob_imagenes_Appinventor.htm

1 Like

1.- Upload and save an image file as a BLOB.

Using ImagePicker we select an image, we obtain its path and name.
We upload the image using the file blob_upload.php and PostFile.

p366i_mysqli_imagenes_blob.aia (3.1 KB)

PHP:
We connect to the database. We get the file using $ file = file_get_contents (‘php://input’);
We save the file as a BLOB in the database.
In addition we also save the file in the current directory.

<?php
// Juan A. Villalpando
// KIO4.COM

 // 1.- IDENTIFICACION nombre de la base, del usuario, clave y servidor
$db_host="localhost";
$db_name="id13313319_kio4";
$db_login="id13313319_juanantonio";
$db_pswd="contraseña";

// 2.- CONEXION A LA BASE DE DATOS
$link = new mysqli($db_host, $db_login, $db_pswd, $db_name);

// 3.- OBTENER ARCHIVO - GET FILE
  $file = file_get_contents('php://input');
   if (file_put_contents($_GET['imagen'],$file == TRUE))  {
   
		$nombre = $_GET['imagen'];
		$extension = pathinfo($nombre, PATHINFO_EXTENSION);
		// $extension = mime_content_type($nombre);
		
		// Archivo a MySQLi. BLOB. - File to MysQLi BLOB.
		$blob = mysqli_real_escape_string($link, $file);
		$resultado = mysqli_query($link, "INSERT INTO dibujos (imagen, extension, nombre) VALUES ('$blob', '$extension', '$nombre')");
		mysqli_close($link);
		
		// Archivo al directorio actual. - File to actual directory
		$fp = fopen($nombre, 'r+b');
		$archivo = fread($fp, filesize($nombre));
		fclose($fp);
		echo "Guardado. Saved."; 
   } else {
	echo "Error";  
   }
?>


blob21

2.- We convert a file to text using Base 64, upload it and save it as a BLOB.

Sometimes we cannot upload the file directly (as file), in this case we convert the file to text using the Base64 extension.
We upload the Base 64 string using the file blob_upload2.php and PostText

p366Bi_mysqli_imagenes_blob.aia (16.2 KB)

PHP:
We connect to the database. We get the text using $data = $_POST;
The PHP code decodes Base 64 and we save that information as BLOB.
[We could have saved the text directly as a string, but in this example we prefer BLOB]
In addition we also save the file in the current directory.

<?php
// Juan A. Villalpando
// KIO4.COM

 // 1.- IDENTIFICACION nombre de la base, del usuario, clave y servidor
$db_host="localhost";
$db_name="id13313319_kio4";
$db_login="id13313319_juanantonio";
$db_pswd="contraseña";

// 2.- CONEXION A LA BASE DE DATOS
$link = new mysqli($db_host, $db_login, $db_pswd, $db_name);

// 3.- OBTENER ARCHIVO - GET FILE
	$datos=$_POST;
	$contenido=$datos['contenido'];
	$nombre=$datos['nombre'];
	
	$extension = pathinfo($nombre, PATHINFO_EXTENSION);
	// $extension = mime_content_type($nombre);
    
	$original = base64_decode(str_replace(array('-', '_',' ','\n'), array('+', '/','+',' '), $contenido));

	// Archivo a MySQLi. BLOB. - File to MysQLi BLOB.
	$blob = mysqli_real_escape_string($link, $original);
	$resultado = mysqli_query($link, "INSERT INTO dibujos (imagen, extension, nombre) VALUES ('$blob', '$extension', '$nombre')");
	mysqli_close($link);
	
	// Archivo al directorio actual. - File to actual directory
	$ifp = fopen( $nombre, "wb");
	fwrite($ifp, $original);
	fclose($ifp);
	echo "Guardado. Saved."; 
?>

3.- List of saved file names. Get the file saved in BLOB.

With…

$ sql = “SELECT imagen, extension FROM dibujo WHERE nombre = ‘$nombre’”;
$ result = mysqli_query ($link, “$sql”);
$ row = mysqli_fetch_array($result);
file_put_contents (‘temporal.png’, $row[“image”]);

…we extract the content of BLOB and save it in a file in the current directory, the name of that file will be: temporal.png

We can see that file using a WebView component

p366Ci_mysqli_imagenes_blob.aia (17.1 KB)

<?php
// Juan A. Villalpando
// KIO4.COM

 // 1.- IDENTIFICACION nombre de la base, del usuario, clave y servidor
$db_host="localhost";
$db_name="id13313319_kio4";
$db_login="id13313319_juanantonio";
$db_pswd="contraseña";

// 2.- CONEXION A LA BASE DE DATOS
$link = new mysqli($db_host, $db_login, $db_pswd, $db_name);

$boton = $_POST['boton'];

// 3.- OBTENER ARCHIVO - GET FILE
if ($boton == "btnInsertar"){
	$contenido=$_POST['contenido'];
	$nombre=$_POST['nombre'];
	
	$extension = pathinfo($nombre, PATHINFO_EXTENSION);
	// $extension = mime_content_type($nombre);
    
	$original = base64_decode(str_replace(array('-', '_',' ','\n'), array('+', '/','+',' '), $contenido));

	// Archivo a MySQLi. BLOB. - File to MysQLi BLOB.
	$blob = mysqli_real_escape_string($link, $original);
	$resultado = mysqli_query($link, "INSERT INTO dibujos (imagen, extension, nombre) VALUES ('$blob', '$extension', '$nombre')");
	mysqli_close($link);
	
	// Archivo al directorio actual - File to actual directory.
	$ifp = fopen($nombre, "wb" );
	fwrite($ifp, $original);
	fclose($ifp);
	echo "Guardado."; 
}

// 4.- MOSTRAR NOMBRE DE IMAGENES - SHOW NAME FILES
if ($boton == "btnListado"){
		$sql = "SELECT nombre FROM dibujos"; 
		$result = mysqli_query($GLOBALS['link'],$sql);
		while($row = mysqli_fetch_array($result)) {
		echo $row["nombre"]."\n"; 
		}
}		

// 5.- Copiar BLOB a Archivo temporal.png - Copy file as temporal.png	
if ($boton == "btnCopiar"){
	$nombre = $_POST['nombre'];
	echo $nombre;
	$sql = "SELECT imagen, extension FROM dibujos WHERE nombre='$nombre' ";

	$result = mysqli_query($link,"$sql");
	$row = mysqli_fetch_array($result);
	// Copia el archivo desde el BLOB al directorio actual, siempre con el nombre temporal.png
	// file_put_contents('temporal.'.$row["extension"], $row["imagen"] );
	file_put_contents('temporal.png', $row["imagen"] );
	}
	
mysqli_close($link);
?>