Sei sulla pagina 1di 20

Almacenar un PDF en una Base de Datos | dnietoweb http://dnietoweb.wordpress.com/2011/03/12/hace...

dnietoweb
Blog de un joven programador WEB

Inicio Curriculum Vitae Portfolio de trabajos Sobre mi

Inicio › Base de Datos › Almacenar un PDF en una Base de Datos

Autores
Almacenar un PDF en
una Base de Datos
Publicado el 12 marzo, 2011 by Daniel Nieto — 38 comentarios

This blog is going to Sígueme en


shutdown in the next Twitter
weeks. All the content is My Tweets
in my new website:
www.danielnieto.es Categorías
Base de Datos
(3)
MySQL (2)
See you!!! PostgreSQL
(3)
Si estamos trabajando con un sistema en el que hay que Plugins (4)
almacenar documentos que no será modificados, por Programación
ejemplo, documentos de cuentas, auditorías, informes, bla (14)
bla bla. CodeIgniter
(3)
En este caso voy a explicar el funcionamiento en una Base HTML (1)
de Datos de PostgreSQL usando CodeIgniter. JavaScript (3)
jQuery (4)

1 de 20 12/05/14 09:46
Almacenar un PDF en una Base de Datos | dnietoweb http://dnietoweb.wordpress.com/2011/03/12/hace...

En primer lugar tendremos que crear un formulario para la MVC (3)


subida de ficheros. En mi caso PDFs. El código de a PHP (5)
continuación es el código genérico para poder subir cualquier Varios (6)
archivo. Si algún lector quiere que ponga el código para Wordpress (1)
seleccionar sólo PDF que me escriba un comentario y lo haré

Artículos
<form id="formulario"
junio 2013
action="ruta_deseada"
mayo 2013
enctype="multipart/form-data"
abril 2013
method="post">
abril 2012
<fieldset>
diciembre 2011
<legend>Seleccione el PDF a subir:
agosto 2011
</legend>
julio 2011
<input id="file" name="file"
abril 2011
type="file" />
marzo 2011
<input type="button" value="Subir"
/>
</fieldset>
</form>

El siguiente paso es el tratamiento de la información que se


envía por medio de la variable $_FILES. En mi caso lo
recibiría en un controlador, ya que trabajo con CodeIgniter.
Por tanto este es el método que recibe la información:

Cargamos el modelo de prueba dónde haremos la inserción


en la BD.

$this->load->model('prueba_model');

Ahora, “cogemos” los datos del formulario, que ha sido


enviada mediante $_FILES. Lo guardamos en una variable
para tratar con la información sin tocar la que recibimos(por si
acaso).

2 de 20 12/05/14 09:46
Almacenar un PDF en una Base de Datos | dnietoweb http://dnietoweb.wordpress.com/2011/03/12/hace...

$this->data['prueba']
['nombre']=$_FILES['file']['name']; Suscríbete!
$this->data['prueba']
['size']=$_FILES['file']['size'];
$this->data['prueba'] Escribe tu dirección de
['tipo_archivo']=$_FILES['file']['type']; correo electrónico para
$this->data['prueba']['fecha']=date('Y- suscribirte a este blog,
m-d'); y recibir notificaciones
de nuevos mensajes
por correo.
El siguiente paso es crear un documento temporal. Al crearlo,
lo creamos para lectura(‘r’), lo leemos y nos quedamos con
Únete a otros 705
su contenido(del archivo que hemos subido).
seguidores

$filename = $_FILES['file']['tmp_name'];
$handle_fil = fopen($filename, "r");
$contents = fread($handle_fil,
Quiero suscribirme!
filesize($filename));
fclose($handle_fil);

Ahora iniciamos una transacción para la inserción de los


documentos. El código se mete entre try y catch por si
hubiera algún problema, poder volver atrás. Creamos un
Base de Datos
objeto largo(large_objet), que son los tipos de datos usados
CodeIgniter
para almacenar un documento en una Base de Datos de tipo
OID o BYTEA. Son unos tipos de datos de más alcance y HTML JavaScript

tamaño. jQuery MVC


MySQL PHP
La creación del LO nos devuelve una información necesaria Plugins
para el almacenamiento. Luego abrimos el LO creado PostgreSQL
anteriormente y se le pasa como parámetros el ID de la BD,
el identificador del LO creado y lo abrimos para escritura(‘w’).
Programación
Varios
Wordpress
Ahora ya podemos insertar en la BD nuestro documento.
Sólo tenemos que insertar el OID, en este caso $oid. El
siguiente paso es escribir en el documento guardado la
información leída anteriormente. Por tanto, usamos el
manejador($handle) y el contenido del
documento($contents) para escribir en el documento. Luego
se cierra y se confirma la operación. Si hubiera alguna

3 de 20 12/05/14 09:46
Almacenar un PDF en una Base de Datos | dnietoweb http://dnietoweb.wordpress.com/2011/03/12/hace...

anomalía, se capta la excepción y se hace un roll_back, es


decir, se vuelve hacia atrás y se deshace todo lo anterior.

$this->db->trans_start();
try{
$oid = pg_lo_create($this->db->conn_id);
$this->data['prueba']['archivo']=$oid;
$handle = pg_lo_open($this->db->conn_id,
$oid, "w");

$this->prueba_model->insertar_BD($this->da
ta['prueba']);
pg_lo_write($handle,$contents);
pg_lo_close($handle);
$this->db->trans_commit();
}catch(Exception $e){
$this->db->trans_rollback();
}

Para terminar sólo nos queda la inserción, es decir, la


llamada al modelo Prueba que teníamos anteriormente y,
más concretamente, al método insertar_BD al que se le
pasa la variable $this->data['prueba']. Este es el código:

function insertar_ae($datos)
{
$instruccion ="insert into
tabla_prueba(fecha,archivo,tipo_archivo,si
ze,nombre)

values('".$datos['fecha']."',".$datos['arc
hivo'].",'".$datos['tipo_archivo']."',

'".$datos['size']."','".$datos['nombre']."
');";
$this->query =
$this->db->query($instruccion);
}

4 de 20 12/05/14 09:46
Almacenar un PDF en una Base de Datos | dnietoweb http://dnietoweb.wordpress.com/2011/03/12/hace...

No soy muy dado a las explicaciones, por lo que si alguien no


entiende algo, responderé sin ningún problema

Saludos!

Tu voto:

1 Vote

Compártelo:

 Compartir

Cargando...

Acerca de Daniel Nieto


Soy un joven programador WEB. Las tecnologías que
uso son PHP, CodeIgniter, MVC, MySQL, PostgreSQL,
CSS, Javascript, jQuery, AJAX, HTML. Actualmente
trabajo en SAICA SL desarrollando aplicaciones de
gestión en el área de la metrología, para empresas del
sector. Investigando de manera freelance sobre SEO y
WPO. Interesado en aprender DRUPAL o
WORDPRESS(algún día me pondré a ello).
Actualmente estoy terminando mi proyecto final de
carrera. Es una aplicación de gestión para la
gestión(valga la redundancia) de toda la documentación
asociada a la gestión de la calidad. Está centrada en
una empresa de metrología, pero es ampliable según
mercado.

‹ Mi primera vez

Plugin para comprimir PDFs en .zip con PHP ›


Etiquetado con: CodeIgniter Desarrollo MVC PHP Programación web
PDF
Publicado en Base de Datos, CodeIgniter, MVC, PHP, PostgreSQL,

5 de 20 12/05/14 09:46
Almacenar un PDF en una Base de Datos | dnietoweb http://dnietoweb.wordpress.com/2011/03/12/hace...

Programación

38 comentarios el “Almacenar un PDF en una Base


de Datos”

Santiago dice:
19 agosto, 2011 en 15:52

Como haces despues para generar el archivo desde la


base de datos?

2 0 Rate This

Responder

Daniel Nieto dice:


19 agosto, 2011 en 18:41

Hola Santiago, ¿a que te refieres?A volver a abrir el PDF


guardado?
Saludos.

0 0 Rate This

Responder

daniela dice:
5 octubre, 2012 en 1:50

hola no se pudieras de favor publicar tu tabla que


utilizaste para guardar la imagen para ver los tipos de
datos

0 0 Rate This

Responder

Daniel Nieto dice:


5 octubre, 2012 en 11:10

6 de 20 12/05/14 09:46
Almacenar un PDF en una Base de Datos | dnietoweb http://dnietoweb.wordpress.com/2011/03/12/hace...

Pues:
fecha -> tipo fecha
archivo -> tipo OID
tipo_archivo -> tipo texto
size -> tipo texto o real
nombre -> tipo texto

No menciono que uso la BD postgreSQL


(http://www.postgresql.org/docs/8.0/static/datatype-
oid.html)

Desconozco si MySQL puede almacenar OIDs

1 0 Rate This

Responder

daniela dice:
5 octubre, 2012 en 22:54

gracias de echo yo tambie estoy usando postgreSQL pero


lo estaba haciendo con:
archivo->bytea
estaba probando el ejemplo pero me marca unos errores:
Severity: Notice

Message: Undefined index: file

Filename: controllers/prueba.php

Line Number: 17

—–es por esta linea ——


$this->data['prueba']['nombre']=$_FILES['file']['name'];

no entiendo que es lo que estoy haciendo mal por cierto


olvidaba mandas a llamar la vista en una funcion diferente

7 de 20 12/05/14 09:46
Almacenar un PDF en una Base de Datos | dnietoweb http://dnietoweb.wordpress.com/2011/03/12/hace...

o en la isma funcion agradesco tu ayuda =)

0 0 Rate This

Responder

Daniel Nieto dice:


7 octubre, 2012 en 13:17

El fallo que te arroja viene del HTML, si te fijas, el


NAME de la etiqueta FILE, es “file”. Si lo has llamado
de otra manera o no tiene name, lógicamente te
fallará.

Y lo de la vista no lo entiendo. Yo uso CodeIgniter. Se


carga un controlador con la info que viene del
HTML(o vista), se trata, se inserta, y se llama a otra
vista o bien, si se hace por AJAX, no haría falta
llamar a vista alguna

0 0 Rate This

Responder

Juan Gudiel dice:


18 diciembre, 2012 en 5:23

Hola muchas gracias por la explicacion aun no soy un


buen programador estoy aprendiendo pero es la primera
respuesta logica de lo que tengo que desarrollar muchas
gracias

0 0 Rate This

Responder

Daniel Nieto dice:

8 de 20 12/05/14 09:46
Almacenar un PDF en una Base de Datos | dnietoweb http://dnietoweb.wordpress.com/2011/03/12/hace...

31 enero, 2013 en 22:34

Gracias a ti. Saludos

0 0 Rate This

Responder

Jesus Jimenez dice:


20 febrero, 2013 en 13:13

buenos dias Daniel,


estoy interesado en crear una base de datos para
almacenar documentos que tenemos en pdf, de manera
que luego de acuerdo a la necesidad pueda buscarlo par
auna colsulta, me gustaria que me recomiende como
hacerlo, que sistema puedo utilizar, no soy muy experto
en la programacion, esto es urgente en mi trabajo, gracias
de antemano

0 0 Rate This

Responder

Daniel Nieto dice:


20 febrero, 2013 en 13:54

Pues te recomiendo seguir mi tutorial. Yo lo he hecho


con PostgreSQL + Codeigniter. Si sigues el tutorial no
tendrás problemas. Saludos

0 0 Rate This

Responder

paid chat rooms dice:


14 marzo, 2013 en 18:40

9 de 20 12/05/14 09:46
Almacenar un PDF en una Base de Datos | dnietoweb http://dnietoweb.wordpress.com/2011/03/12/hace...

I just could not go away your web site before suggesting


that I extremely enjoyed
the standard information a person provide for
your guests? Is gonna be back ceaselessly in order to
inspect new posts

1 0 Rate This

Responder

chatrandom dice:
22 abril, 2013 en 22:24

Hello everyone, it’s my first visit at this site, and article is


genuinely fruitful for me, keep up posting these articles.

0 0 Rate This

Responder

Daniel Nieto dice:


22 abril, 2013 en 22:31

Thanks very much!! Actually i’m so busy but I’ll try to


write more things

0 0 Rate This

Responder

Andra dice:
24 abril, 2013 en 14:51

I am in fact grateful to the holder of this web page who


has shared this enormous post at at this time.

0 0 Rate This

10 de 20 12/05/14 09:46
Almacenar un PDF en una Base de Datos | dnietoweb http://dnietoweb.wordpress.com/2011/03/12/hace...

Responder

Daniel Nieto dice:


24 abril, 2013 en 14:59

Thanks!

0 0 Rate This

Responder

Haarausfall stoppen dice:


26 abril, 2013 en 9:48

I savor, cause I discovered just what I used to be having a


look for. You’ve ended my four day long hunt! God Bless
you man. Have a nice day. Bye

1 0 Rate This

Responder

http://Manyfriends.net dice:
28 abril, 2013 en 8:04

Wow that was strange. I just wrote an incredibly long


comment but after I clicked
submit my comment didn’t show up. Grrrr… well I’m not
writing all that over again.
Regardless, just wanted to say fantastic blog!

0 0 Rate This

Responder

verdopple deine Dates dice:


28 abril, 2013 en 9:03

11 de 20 12/05/14 09:46
Almacenar un PDF en una Base de Datos | dnietoweb http://dnietoweb.wordpress.com/2011/03/12/hace...

Greate post. Keep posting such kind of information on


your page. Im really impressed by it.
Hey there, You’ve done a great job. I will certainly digg it
and in my view recommend to my friends. I’m sure they’ll
be benefited from this web site.

0 0 Rate This

Responder

chatroulette dice:
2 mayo, 2013 en 16:07

What’s up to every body, it’s my first visit of this web site;


this weblog consists of amazing and actually fine
data for readers.

0 0 Rate This

Responder

Daniel Nieto dice:


2 mayo, 2013 en 21:04

Thanks!

0 0 Rate This

Responder

Taufgeschenke dice:
2 mayo, 2013 en 21:03

Greetings I am so thrilled I found your web site, I really


found you by mistake, while I
was looking on Askjeeve for something else, Anyhow I am
here now and would just like to say thanks for a incredible

12 de 20 12/05/14 09:46
Almacenar un PDF en una Base de Datos | dnietoweb http://dnietoweb.wordpress.com/2011/03/12/hace...

post and a all round exciting blog (I


also love the theme/design), I don’t have time to read
through it all at the minute but I have book-marked
it and also included your RSS feeds, so when I have time I
will be back to read a
lot more, Please do keep up the awesome b.

0 0 Rate This

Responder

Daniel Nieto dice:


2 mayo, 2013 en 21:05

Actually I don’t have so much free time but I’ll try to


write more posts and also in english! Thanks!

0 0 Rate This

Responder

hemorroides dice:
17 mayo, 2013 en 16:17

I blog often and I seriously appreciate your content.


Your article has really peaked my interest. I will take a note
of your website and keep checking for
new information about once per week. I subscribed to
your RSS feed as well.

0 0 Rate This

Responder

Zahnzusatzversicherung dice:
18 mayo, 2013 en 9:36

I write a leave a response whenever I appreciate a post on

13 de 20 12/05/14 09:46
Almacenar un PDF en una Base de Datos | dnietoweb http://dnietoweb.wordpress.com/2011/03/12/hace...

a website or if I have something


to valuable to contribute to the conversation. Usually it’s
caused by the passion communicated in the article I read.
And on this article Almacenar un PDF en una Base de
Datos | dnietoweb. I was excited enough to post a leave a
responsea response I actually do have a couple of
questions for you if it’s allright.
Could it be simply me or do a few of these responses
appear as if they
are coming from brain dead visitors? And,
if you are writing on other sites, I would like to follow you.

Would you make a list every one of your communal pages


like your Facebook page, twitter feed, or linkedin profile?

0 0 Rate This

Responder

Daniel Nieto dice:


18 mayo, 2013 en 10:00

You could follow me as @danielnietoweb in Twitter. In


linkedin my name is Daniel Nieto Caballero.

I’m sorry for writting in spanish only. In those


moments I don’t have so much time, I hope that in the
nexts months I could do it.

Oh! My website is http://www.danielnieto.es is under


construction

0 0 Rate This

Responder

Fettverbrennungsofen dice:
13 junio, 2013 en 19:54

14 de 20 12/05/14 09:46
Almacenar un PDF en una Base de Datos | dnietoweb http://dnietoweb.wordpress.com/2011/03/12/hace...

Wow, fantastic blog layout! How long have you been


blogging for?
you make blogging look easy. The overall look of your web
site is wonderful, as well as
the content!

0 0 Rate This

Responder

Daniel Nieto dice:


13 junio, 2013 en 20:12

Thanks. This blog is closing in the next weeks, please


visit http://www.danielnieto.es/blog
All the blog’s content is there!!

0 0 Rate This

Responder

Brittneyt.Mancouch.com dice:
15 junio, 2013 en 8:02

whoah this weblog is wonderful i really like reading


your articles. Keep up the great work! You recognize, a lot
of people are hunting around
for this info, you can aid them greatly.

0 0 Rate This

Responder

http://madchatroulette.de/ dice:
15 junio, 2013 en 9:25

You actually make it seem so easy with your presentation

15 de 20 12/05/14 09:46
Almacenar un PDF en una Base de Datos | dnietoweb http://dnietoweb.wordpress.com/2011/03/12/hace...

but I find this matter to be actually


something which I think I would never understand. It
seems too complex and extremely broad for
me. I am looking forward for your next post, I will try to get
the hang of it!

0 0 Rate This

Responder

Bev dice:
26 junio, 2013 en 12:39

I’m really enjoying the design and layout of your blog. It’s a
very easy on the eyes which makes it much more pleasant
for me to come here and visit more often. Did you hire out
a developer to create your theme?
Excellent work!

0 0 Rate This

Responder

Daniel Nieto dice:


26 junio, 2013 en 13:26

Thanks! I didn’t design this theme cause is a free


blog.
I have moved to http://www.danielnieto.es or
http://www.danielnieto.es/blog

It’s my website/personal blog

0 0 Rate This

Responder

http://journals.fotki.com/kurtisgoff/kurtisgoff/entry

16 de 20 12/05/14 09:46
Almacenar un PDF en una Base de Datos | dnietoweb http://dnietoweb.wordpress.com/2011/03/12/hace...

/gttbrdbdtsbk dice:
26 junio, 2013 en 13:35

A person essentially help to make seriously articles I might


state. That is the very first time I frequented your website
page and to this point?
I amazed with the research you made to create this
particular publish amazing.
Great process!

0 0 Rate This

Responder

Daniel Nieto dice:


26 junio, 2013 en 13:38

Please visit my website http://www.danielnieto.es


Those articles are there. This free blog is going to be
closed in the next days

0 0 Rate This

Responder

Francisco Velasquez dice:


27 junio, 2013 en 18:25

Hola Daniel, saludos, tengo una pregunta para ti, deseo


hacer una pequeña bibliote de leyes en mi pais
(nicaragua) a traves de un programa elaborado en Visual
Estudio 2010, donde el programa me liste todas las leyes
y al darle click me pueda visualizar la ley como tal, mi
pregunta es la siguiente: que tengo que hacer primero?
debo hacer una base de datos de todas las leyes como
hago esa base de datos, se puede hacer en SQL?
ayudame por favor.

17 de 20 12/05/14 09:46
Almacenar un PDF en una Base de Datos | dnietoweb http://dnietoweb.wordpress.com/2011/03/12/hace...

0 0 Rate This

Responder

Daniel Nieto dice:


27 junio, 2013 en 18:29

En serio me preguntas eso?No has leído que esto se


cierra en breves?
Puedes y debes hacerlo en SQL. O MySQL o
PostgreSQL u Oracle.
Como hacerla? No hay una respuesta. Si nunca has
hecho una deberías aprender. Sino, puedes pagarme
y yo la haré con gusto

0 0 Rate This

Responder

Francisco Velasquez dice:


27 junio, 2013 en 21:13

es cierto que estoy empezando a trabajar con bases de


datos, y si te pregunto es aprender quiero,simplemente te
pedia como empezar, pero de todos modos te lo
agradesco

0 0 Rate This

Responder

MARCOS TECPILE (@markinstecpile) dice:


20 noviembre, 2013 en 9:50

Amigo me podrias ayudar es que estoy tratando de


almacenar pdf en postgresql, desde pHP

0 0 Rate This

18 de 20 12/05/14 09:46
Almacenar un PDF en una Base de Datos | dnietoweb http://dnietoweb.wordpress.com/2011/03/12/hace...

Responder

Daniel Nieto dice:


20 noviembre, 2013 en 9:53

Este blog ya no se usa, pásate por el nuevo —>


http://www.danielnieto.es/hacer-un-pdf-con-php-
con-informacion-de-una-base-de-datos/

0 0 Rate This

Responder

Deja un comentario

Gravatar Dir. electrónica (requerido)


(La dirección no se hará pública)

Nombre (requerido)

Web

Recibir siguientes comentarios por correo.

Recibir nuevas entradas por email.

19 de 20 12/05/14 09:46
Almacenar un PDF en una Base de Datos | dnietoweb http://dnietoweb.wordpress.com/2011/03/12/hace...

Publicar comentario

© 2014 dnietoweb ↑ Create a free website or blog at


WordPress.com. | El tema Responsive.

20 de 20 12/05/14 09:46

Potrebbero piacerti anche