|     Inicio    |   |         |  |   FOROS      |  |      |      
   Elastix - VoIP B4A (Basic4Android) App inventor 2 PHP - MySQL
  Estación meteorológica B4J (Basic4Java) ADB Shell - Android Arduino
  Raspberry Pi Visual Basic Script (VBS) FireBase (BD autoactualizable) NodeMCU como Arduino
  AutoIt (Programación) Visual Basic Cosas de Windows Webs interesantes
Translate:
Búsqueda en este sitio:


.

App inventor 2 en español
Cómo programar los teléfonos móviles con Android
mediante App inventor 2 - Juan Antonio Villalpando

--- PHP y MySQL en App Inventor 2 --

Volver al índice del tutorial de PHP y MySQL

____________________________

366.- App inventor y MySQLi. Imágenes en la base de datos. BLOB. (II)

p366_mysqli_imagenes_blob.aia

- Mediante el Selector de imagen vamos a seleccionar una imagen de la Galería de imágenes y la vamos a subir a nuestra base de datos MySQLi. Las imágenes se guardarán en la base de datos con el tipo BLOB.

- Según el tamaño requerido hay distintos tipos de BLOB.

- TINYBLOB: admite hasta 255 caracteres.
- BLOB:
admite hasta 65535 caracteres.
- MEDIUMBLOB:
admite hasta 16777215 caracteres.
- LONGBLOB:
Permite hasta 4294967295 caracteres .

BLOB significa: Binary Large Object (Objeto Binario Grande) , puede contener imágenes o cualquier tipo de datos binarios.

- En nuestro ejemplo utilizaremos MEDIUMBLOB.

- Aquí vimos cómo subir datos a MySQLi por GET y POST:

- https://community.appinventor.mit.edu/t/mysqli-php-get-post-insert-update-delete-show-000webhost/7241

- Aquí vimos cómo subir un archivo a un servidor:

- https://community.appinventor.mit.edu/t/upload-file-to-server-hosting-by-php-encode-file-to-base-64-extension/7445

______________________________________________
1.- Creación de la tabla en la base de datos.

- Mediante PhpMyAdmin crearemos en nuestra base de datos una tabla llamada dibujos con 4 columnas:

id, imagen, extension, nombre. Observa que imagen es: mediumblob

______________________________________________
- Diseño.

______________________________________________
- Bloques.

______________________________________________
- PHP.

- El archivo se guardará de dos forma, como tal archivo en el directorio donde se encuentra el código PHP y como BLOB en la base de datos.

blob_upload.php

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

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

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

if ($link->connect_error) {
    die("Error de conexión: ".$link->connect_error);
} else {

// 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')");
		
		if ($resultado) {echo $nombre. " ha subido.";} 
		              else {echo "Error: ".msqli_error($link);}
					
		mysqli_close($link);	
   } else {
	echo "Error in GET file";  
   }
   
 }
?>

- El archivo guardado en la Base de datos como BLOB:

- El mismo archivo guardado en el mismo directorio que el código php:

______________________________________________
______________________________________________
______________________________________________
2.- Subir archivo. Listar los archivos subidos. Bajar un archivo.

p366D_mysqli_imagenes_blob.aia

- Elegimos y subimos un archivo mediante el código blob_upload.php visto en el apartado anterior.

- Cuando pulsamos "Listado de nombres" obtenemos, mediante el archivo blob_listado.php, en un VisorDeLista el nombre de los archivos BLOB guardados.

- Al Seleccionar un elemento del VisorDeLista, llamaremos al archivo blob_obtener.php, éste copiará el archivo solicitado desde la Base de datos al directorio donde se encuentra el archivo php. Este archivo siempre se llamará temporal.png

- Se mostrará el archivo en un componente Imagen mediante la dirección web del archivo temporal.png

______________________________________________
- Diseño.

______________________________________________
- Bloques.

______________________________________________
- PHP.

- Utilizaremos tres archivos blob_upload.php que hemos visto en el apartado anterior, blob_listado.php y blob_obtener.php

- Mediante el blob_listado.php obtendremos un listado de los nombres de los archivos blob que se encuentran el la base de datos. El resultado se insertará en un VisorDeLista.

- Mediante el blob_obtener.php, el archivo Seleccionado con el VisorDeLista se copiará en la carpeta donde se encuentra el php con el nombre de temporal.png

blob_listado.php

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

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

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

// 3.- Lista nombre.
$sql = "SELECT nombre FROM dibujos"; 
$result = mysqli_query($GLOBALS['link'],$sql);
while($row = mysqli_fetch_array($result)) {
echo $row["nombre"]."\n"; 
}
mysqli_close($link);
?>

 

blob_obtener.php

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

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

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

// 3.- BLOB to temporal.png .
$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);

?>

 

______________________________________________
______________________________________________
______________________________________________
3.- Subir archivo como texto en Base 64. BLOB.

p366B_mysqli_imagenes_blob.aia

- Puede ocurrir que nuestro servidos no nos deje subir archivo mediante PublicarArchivo (PostFile), es este caso podemos codificar el archivo en texto mediante el código Base 64, enviarlo, cuando llegue al servidor se decodifique y se guarde en la base de datos como BLOB.

- La manera de subir un archivo mediante Base 64 lo vimos en: 277_extension_imagen_string.htm (en el foro de la Community)

______________________________________________
- Diseño.

 

______________________________________________
- Bloques.

______________________________________________
- PHP.

- Una vez recibido el archivo como string en Base 64, se podría guardar como texto en la Base de datos, pero en nuestro caso vamos a continuar guardándolo como BLOB.

- El archivo se guardará de dos forma, como tal archivo en el directorio donde se encuentra el código PHP y como BLOB en la base de datos.

blob_upload2.php

<?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."; 
?>

______________________________________________
______________________________________________
______________________________________________
4.- Listado de archivos. Extraer BLOB y convertirlo a archivo.

p366C_mysqli_imagenes_blob.aia

- Una vez que tengamos los archivos guardados como BLOB en la base de datos, vamos a ver cómo recuperarlos.

- Veremos cómo listar los archivos por nombre.

- Luego podremos poner en el CampoDeTexto el nombre de un archivo, ese archivo se extraerá como BLOB y se copiará en el directorio donde se encuentra el código php, en mi caso siempre se guardará con el nombre temporal.png

- Observarás que el nombre de los archivos son muy largos, por ejemplo: 7918673896754510249.png

- En vez de poner ese nombre tan largo, lo puedes subir con otro nombre que consideres más apropiado.

______________________________________________
- Diseño.

______________________________________________
- Bloques.

______________________________________________
- PHP.

blob_listado.php

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

______________________________________________
______________________________________________
______________________________________________
5.- Bajar archivo BLOB.

p366_mysql_bajarBlob.aia

______________________________________________
- Bloques.

 

blob_bajar.php

<?php
 // 1.- IDENTIFICACION nombre de la base, del usuario, clave y servidor
$db_host="localhost";
$db_name="id19781186_base";
$db_login="id19781186_juan";
$db_pswd="Contraseña";

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

if ($link->connect_error) {
    die("Error de conexión: ".$link->connect_error);
} else {

// 3.- OBTENER EL ARCHIVO. GET FILE.
$nombre = $_GET['imagen'];
$resultado = mysqli_query($link, "SELECT * FROM dibujos WHERE nombre = '$nombre'");
if ($resultado && mysqli_num_rows($resultado) > 0) {
    $fila = mysqli_fetch_assoc($resultado);
    $imagenBlob = $fila['imagen'];
    $extension = $fila['extension'];

// 4.- ENVIAR EL ARCHIVO. SEND FILE.
	header("Content-Type: image/".$extension);
    header("Content-Disposition: attachment; filename=$nombre.$extension");
	echo $imagenBlob;
}

mysqli_close($link);
}
?>

https://community.appinventor.mit.edu/t/mysqli-upload-and-save-image-file-as-blob-postfile-posttext/8302/18

 

_______________________________

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información