[pgsql-ayuda] Re: Large objects

Norma Cordero Sanchez norma@vico.fciencias.unam.mx
Tue, 18 May 1999 22:50:31 -0500


Victor Manuel Jaquez Leal wrote:
>> > esto para el web, esto es un usuario sube su archivo en texto via una
>> > pagina web, se guarda en la base de datos, y posteriormente el sistema
>> > puede desplegarlo en una pagina web.
>> >
>> > Alguna idea de como hacer esto???
>>
>> ?Qu? te parece esta funci?n en Perl?
>> La utilizo para subir im?genes, pero puedes cambiar la validaci?n del tipo
>> MIME para el tipo que desees subir.
>
>Hola, ya solucione la parte de subir el archivo, ahora lo que no se es como meterlo en la base
>de datos, estoy usando Postgres 6.5, ya cree la tabla con el objeto largo, pero ahora no se
>como meterle info. Alguna idea.


Hola todos.

Juan Manuel:
Tengo un ejemplito, muy simple que quiza te pueda ayudar, esta en PHP, pero
sera simple traducirlo a perl.



<?PHP


/*
EJEMPLIN SIMPLE PARA MANEJAR IMAGENES.

PARA ESTO SE TIENE UNA BASE DE DATOS HECHA ASI:
        CREATE TABLE fotos ( nombre text primary key, foto oid );
** EL TIPO DE DATOS ES oid. RECORDAR DAR LOS PERMISOS ADECUADOS A NOBODY (O EL USUARIO QUE CONSULTE LA BASE DE DATOS)
*/


$conexion = pg_Connect( 'localhost', '5432', 'fotos' );
if ( !$conexion )
        {
        print( "ERROR en conexion" );
        exit;
        }

$arch_origen = '/usr/local/apache/htdocs/OL/logo.gif';
$arch_dest = '/usr/local/apache/htdocs/OL/bas.gif';  // ESTE DEBE EXISTIR, Y NOBODY DEBE TENER PERMISOS DE ESCRITURA Y LECTURA
$nombre = 'yoyis';  // QUE PUEDE PROVENIR DE UNA FORMA

$query = pg_Exec( $conexion, " SELECT foto FROM fotos WHERE nombre = '$nombre' ; " );
if ( !$query )
        print( "Error query" );
else
        {
        if ( pg_NumRows( $query ) <= 0 )
                {
                $orden = " INSERT INTO fotos VALUES ( '$nombre', lo_import( '$arch_origen' ) ) ; ";
                $query = pg_Exec( $conexion, $orden );
                // AQUI GUARDE EN LA BASE DE DATOS LA IMAGEN, EN ESTE MONENTO YA PODRIA BORRAR EL ARCHIVO ORIGEN DE DISCO, Y YA NO AFECTA LOS DAT\
OS DE LA BASE.
                if ( !$query )
                        print( "Error query" );
                }
        $query = pg_Exec( $conexion, " SELECT foto FROM fotos WHERE nombre = '$nombre' " );
        if ( !$query )
                print( "Error query" );

        $oid_foto = pg_Result( $query, 0, 'foto' );
        print( "FOTO ( $nombre ): $oid_foto <P>" );
        }


// Y CUANDO SE NECESITE VER LA FOTO:
$query = pg_Exec( $conexion, " SELECT lo_export( fotos.foto, '$arch_dest' ) FROM fotos WHERE nombre = '$nombre' ; " );
if ( !$query )
        print( "Error query" );


print( " Foto de $nombre: <P> " );


print( "
<img src=\"Pon_Imagen.php3?$nombre+$arch_dest\">
" );

/*
SI SE QUIERE ELIMINAR LA FOTO EN LA BASE DE DATOS SE EJECUTA EN POSTGRES:
SELECT lo_unlink( $oid_foto ); DELETE FROM fotos WHERE nombre = '$nombre';
*/


pg_FreeResult( $query );
pg_Close( $conexion );



?>



Y EL ARCHIVO Pon_Imagen.php3 (QUE BIEN PUEDE IR EN EL MISMO) ES:

<?PHP

Header( "Content-type: image/gif" );


list( $nombre, $arch_dest ) = $argv;

$foto = ImageCreateFromGif( $arch_dest );

ImageGif( $foto );

ImageDestroy( $foto );

?>



Espero que te sea de utilidad. 

       NORMA
--------- Pie de mensaje -------------------------------------------
Archivo historico: http://tlali.iztacala.unam.mx/maillist/pgsql-ayuda
Cancelar inscripcion:
mail to: majordomo@tlali.iztacala.unam.mx
text   : unsubscribe pgsql-ayuda