Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: xemnas en 21 Noviembre 2011, 19:45 pm



Título: insertar imagenes en base de datos
Publicado por: xemnas en 21 Noviembre 2011, 19:45 pm
hola a tod@s, alguien podría decirme como insertar una imagen en un insert into?
he probado a poner la ruta donde tengo la imagen pero no me la coge. gracias ;D


Título: Re: insertar imagenes en base de datos
Publicado por: fran800m en 21 Noviembre 2011, 20:01 pm
Yo nunca lo he hecho, guardo la ruta y subo el fichero.

Para subir la imagen supongo que tendrás que crear un flujo y tener en la tabla un campo binario o similar.

Supongo que habrá opiniones a favor y en contra de hacerlo de una manera u otra, yo prefiero como lo hago ahora.

Espero que alguien más te eche una mano, seguro que yo también aprendo algo nuevo  :)

Un saludo,


Título: Re: insertar imagenes en base de datos
Publicado por: seba123neo en 22 Noviembre 2011, 04:19 am
no se en que lenguaje estas programando, pero es simplmenete insertar un array de bytes de la imagen (binario), para mysql por ejemplo se usa el campo BLOB y para SQL Server se usa el bynary (aunque este esta en desuso) y yo uso el varchar(max).

lo que tenes que hacer es desde programacion, cargar la imagen y convertirla a array de bytes, y grabas eso...luego para recuperar la imagen haces lo contrario, convertis los array de bytes a imagen.

yo lo uso en SQL Server donde pueden guardar imagenes de los productos, pero les doy para que acepte solo una imagen inferior a 50kb con motivo de que no se sobrecarge la base.

lo bueno de esto es que es mas portable, cuando haces backup las imagenes las tenes en la base de datos y no tenes que ir llevando las imagenes aparte y peor si son miles.

saludos.


Título: Re: insertar imagenes en base de datos
Publicado por: Novlucker en 22 Noviembre 2011, 13:13 pm
Más de lo mismo que han dicho antes ... ¿En que lenguaje intentas hacer el insert? ¿En que gestor de base de datos?

En MSSQL desde TSQL por ejemplo lo puedes hacer con OPENROWSET, pero dudo que intentes hacerlo desde TSQL :P

Saludos


Título: Re: insertar imagenes en base de datos
Publicado por: [u]nsigned en 22 Noviembre 2011, 15:09 pm
Es mejor solo guardar el path de la imagen en el server, si guardas la imagen en un campo binario vas a freir tu procesador...


Título: Re: insertar imagenes en base de datos
Publicado por: Novlucker en 22 Noviembre 2011, 15:16 pm
¿Para que sirven los campos binarios entonces?


Título: Re: insertar imagenes en base de datos
Publicado por: [u]nsigned en 22 Noviembre 2011, 16:01 pm
Para lo que vos como programador los quieras usar, guardar tipos abstractos como objetos.


Título: Re: insertar imagenes en base de datos
Publicado por: Novlucker en 22 Noviembre 2011, 17:27 pm
Entre otras cosas, imágenes.

No se va a freír ningún procesador si guardas imágenes en una base de datos, esta claro que por una cuestión de performance no se conveniente guardar las imágenes estáticas de un sitio en una base de datos, pero por lo general es cuestión de gustos y dependerá de cada caso.

Saludos


Título: Re: insertar imagenes en base de datos
Publicado por: seba123neo en 22 Noviembre 2011, 21:19 pm
Entre otras cosas, imágenes.

No se va a freír ningún procesador si guardas imágenes en una base de datos, esta claro que por una cuestión de performance no se conveniente guardar las imágenes estáticas de un sitio en una base de datos, pero por lo general es cuestión de gustos y dependerá de cada caso.

Saludos

+1


Título: Re: insertar imagenes en base de datos
Publicado por: fran800m en 23 Noviembre 2011, 02:01 am
Permitidme una pregunta.

Para reducir la transferencia desde servidor a cliente se suele usar directrices en .htaccess para marcar la caducidad de ficheros estáticos, como imágenes y otros, para que se tire de caché de navegador antes de enviar dichos ficheros desde servidor.

Si creamos "al vuelo" las imágenes siempre se estaría realizando dicha transferencia, ¿no?

Además, el solo hecho de afectar al rendimiento sería para pensárselo si la aplicación ya está en apuros a ese respecto, ¿no creéis?

Yo no lo veo tanto cuestión de gustos como de necesidades concretas.

Por cierto, buen rollo  ;D que solo por disentir ya se me han echado encima.

Sería bueno que comentáramos los pros y contras, a ser posible en base a experiencias concretas.

Un saludo,


Título: Re: insertar imagenes en base de datos
Publicado por: Novlucker en 23 Noviembre 2011, 04:05 am
Es que con lo que se pregunta originalmente no alcanza para seguir con la discusión, faltan datos.

Por ej. en mi caso en particular y hablando de desarrollar en ASP.NET, para atender los request de imágenes alojadas en el servidor se suele utilizar handlers (*.ashx), que son quienes se encargan de obtener los datos binarios y renderizarlos en el navegador, y ahí mismo se puede definir si la información es "cacheable" y por cuanto tiempo, con lo cual solo se hace la consulta en ese intervalo :)

Saludos


Título: Re: insertar imagenes en base de datos
Publicado por: fran800m en 23 Noviembre 2011, 04:19 am
Citar
Por ej. en mi caso en particular y hablando de desarrollar en ASP.NET, para atender los request de imágenes alojadas en el servidor se suele utilizar handlers (*.ashx), que son quienes se encargan de obtener los datos binarios y renderizarlos en el navegador, y ahí mismo se puede definir si la información es "cacheable" y por cuanto tiempo, con lo cual solo se hace la consulta en ese intervalo

Gracias Novlucker, eso me lo apunto  :)


Título: Re: insertar imagenes en base de datos
Publicado por: seba123neo en 25 Noviembre 2011, 03:49 am
todavia no sabemos que esta haciendo, yo no hable de web, sino de .NET o VB en MySQL o SQL Server, me imagino que para web MySQL es igual. me ponen mal los usuarios que preguntan y no dan respuesta.


Título: Re: insertar imagenes en base de datos
Publicado por: BlackZeroX (Astaroth) en 25 Noviembre 2011, 05:11 am
@seba123neo
Una preguntona... de cuantos bytes es un solo varchar en una BDD? (No me refiero a la dimencion maxima).

Dulces Lunas!¡.


Título: Re: insertar imagenes en base de datos
Publicado por: seba123neo en 25 Noviembre 2011, 05:25 am
@seba123neo
Una preguntona... de cuantos bytes es un solo varchar en una BDD? (No me refiero a la dimencion maxima).

Dulces Lunas!¡.

si declaras varchar(80) solo podras poner 80 caracteres o sea 80 bytes. aunque varchar usa unos bytes extra en la cabecera para almacenar la longitud. una cita:

Citar
Al ser variable, Varchar necesita utilizar 1 o 2 bytes adicionales para registrar la longitud del valor: 1 byte si la longitud máxima de la columna es 255 bytes o menor y 2 bytes si es más. Entonces, si declaramos un Varchar(255) utilizará un byte adicional ósea será 256 y si lo declaramos Varchar(1500) en realidad serán 1502 bytes.

para tu pregunta, varchar(1) seria igual a 2 bytes.

saludos.


Título: Re: insertar imagenes en base de datos
Publicado por: Novlucker en 25 Noviembre 2011, 12:18 pm
Igual hay un tema ahí, y es que en lugar de Varchar debería de utilizarse el tipo de dato adecuado, Varbinary :)

... me ponen mal los usuarios que preguntan y no dan respuesta.
Idem, y peor cuando son temas que pueden resultar interesantes :¬¬

Saludos


Título: Re: insertar imagenes en base de datos
Publicado por: seba123neo en 25 Noviembre 2011, 16:33 pm
el tema es que Varbinary esta en desuso (deprecated) y lo van a eliminar en futuras versiones de SQL Server, yo guardaba la imagen ahi, y tuve que cambiar a Varchar(MAX).

saludos.


Título: Re: insertar imagenes en base de datos
Publicado por: Novlucker en 25 Noviembre 2011, 17:24 pm
En realidad no Seba, el que esta en desuso es Image (entre otros)
SQL Server 2008 R2: http://msdn.microsoft.com/en-us/library/ms143729.aspx
SQL Server 2012: http://technet.microsoft.com/en-us/library/ms143729(SQL.110).aspx

Saludos


Título: Re: insertar imagenes en base de datos
Publicado por: seba123neo en 25 Noviembre 2011, 19:30 pm
me confundi  :D, quise decir que yo lo guardaba en Image antes y lo pase al otro.


Título: Re: insertar imagenes en base de datos
Publicado por: llAudioslavell en 12 Enero 2012, 17:37 pm
hola a tod@s, alguien podría decirme como insertar una imagen en un insert into?
he probado a poner la ruta donde tengo la imagen pero no me la coge. gracias ;D


Hasta donde yo se es que no seria una buena idea almacenar la imagen en la BD, ya que esta se volveria muy pesada, no es recomendable, yo solo  selecciono y guardo el path de la imagen  y la imagen dejo que mi sistema lo guarde en una carpeta aparte.. pero Ojo que solo guardo el Path .. mas no la imagen....
Salu2 !


Título: Re: insertar imagenes en base de datos
Publicado por: Novlucker en 12 Enero 2012, 18:16 pm
Depende de que gestor estemos hablando, el problema es que el usuario nunca más dio señales de vida :¬¬
En SQL Server por ejemplo puedes hacer uso de Filestream por ejemplo ;)

Saludos