Postgres: file -> Bytea

Antes que nada, creamos una tabla en la Base de datos:

 

prueba=# create table archivo (Id serial, Nombre varchar(20), Tipo varchar(20), Contenido bytea, primary key (Id));

Luego hay que crear un formulario sencillo HTML:

 <form action="dato_image.php" method="post" enctype="multipart/form-data">
        <table>
           <tr> <td>
               <label for="archivo">Busque El archivo</label> </td>
               <td>
               <input type="file" name="archivo" size="20"> </td></tr>
            <tr><td>
                <input type="submit" value="cargar archivo"></td></tr></table>    </form>

Vamos a crear un archivo PHP que conecte con la BD

<?php

   //Recibimos los datos 

   $nombre_archivo=$_FILES['archivo']['name'];
   $tipo_archivo=$_FILES['archivo']['type'];
   $tamagno_archivo=$_FILES['archivo']['size'];

if($tamagno_archivo<=100000){
     
    $carpeta_destino='/var/www/html/php/Upload_Archivo/';
//movemos el archivo de la carpeta temporal al directorio escogido 
  move_uploaded_file($_FILES['archivo']['tmp_name'],$carpeta_destino.$nombre_archivo);

}else{
    echo "El archivo es muy grande";
 }

$conexion=pg_connect("host=127.0.0.1 dbname=prueba user=postgres password=12345") or die ("No se pudo conectar a la DB: " . pg_last_error());

pg_set_client_encoding($conexion, "UTF8");



$archivo_imagen=fopen($carpeta_destino.$nombre_archivo, "r");
$contenido=fread($archivo_imagen,$tamagno_archivo);
$contenido=addslashes($contenido); 
// addslashes para que php pueda escapar las barras invertidas y pueda interpretar la ruta
fclose($archivo_archivo);

$sql="INSERT INTO archivo (Nombre,Tipo,Contenido) values  ('$nombre_archivo','$tipo_archivo','{$contenido}')";

   $resultado=pg_query($conexion,$sql);

if(pg_affected_rows($resultado)==0){
        
    echo " No se ha insertado registro";
    
}else{
    
   echo " Se ha insertado el registro con éxito";
    
}

 
?>

Leave a Comment