Re: Insertar imagen tipo bytea

From: "Marco Antonio" <marcoantoniofrias(at)gmail(dot)com>
To: "Linder Poclaba Lazaro" <linderlpl(at)gmail(dot)com>
Cc: "Alvaro Herrera" <alvherre(at)alvh(dot)no-ip(dot)org>, "postgres Emanuel CALVO FRANCO" <postgres(dot)arg(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Insertar imagen tipo bytea
Date: 2008-10-01 14:28:34
Message-ID: 33e030de0810010728s69f76312k4164bf64e998cb7a@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

2008/10/1 Linder Poclaba Lazaro <linderlpl(at)gmail(dot)com>:
>
> Gracias por responder a todos, aunque no lo he logrado aun... tengo mas
> ideas y sigo buscando como hacerlo con persistencia.
>

mmm... no utilizo TopLink pero si otro framework... pero la idea es esta:

CREATE TABLE documento (
iddocumento SERIAL PRIMARY KEY,
nombre CHARACTER VARYING(255) NOT NULL,
nombredocumento CHARACTER VARYING(255) NOT NULL,
documento BYTEA NOT NULL,
contenttype TEXT NOT NULL,
tamano INTEGER NOT NULL
);

Yo requería subir y descargar documentos así que es necesario tener un
nombre para diferenciar entre todos, el nombre del archivo (quitando
acentos, tildes, etc y espacios por temas de la web), el archivo en
sí, el tipo de archivo (mime_type) y el tamaño; los últimos 2 campos
me servían exclusivamente para descargar o mostrar el archivo.

El respectivo bean tiene aparate de sus propiedades estos métodos:

public void read(InputStream file) throws IOException {
setDocumento(IOUtils.toByteArray(file));
}

public void write(OutputStream file) throws IOException {
IOUtils.write(getDocumento(), file);
}

Con la librería commons-io leía y escribía el archivo a un array de
bytes (byte[]). Existe otra forma de hacer mediante el objeto Channel
para no saturar la memoria pero todavía no hice nada formal con esto.
Desde la web obtengo el archivo mediante la librería
commons-fileupload y luego lo almaceno en la base:

Documento documento = new Documento();
documento.setNombre(this.nombre);
documento.setNombredocumento(IOUtil.getFilename(this.upload.getName()));
documento.read(this.upload.getInputStream());
documento.setContenttype(this.upload.getContentType());
documento.setTamano(Integer.valueOf(this.upload.getSize()));

xxxx.save(documento);

Donde 'upload' es el objeto que contiene el archivo,
'IOUtil.getFilename()' método que corrige el nombre del archivo,
'read()' método que establece el contenido del archivo y xxx.save
guarda en la base el objeto.

Si necesitas más información o tienes dudas contáctame por chat o
correo... espero haya resuelto tu pregunta o duda.

Saludos y abrazos...

Marco Antonio Frias Butrón
marcofrias(at)linuxpackages(dot)net
Slackware ~ Linux User #356229

--
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos
las mismas cosas.
~ Albert Einstein ~

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Raul Andres Duque 2008-10-01 14:35:06 Re: [Fwd: Re: CLAVES EN POSTGRES]
Previous Message Crispin T. 2008-10-01 14:26:58 detalles de un delete