Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Guardar archivos en BD tipo vídeos, pdfs, imágenes... ¿filestream es la solución?

Estas en el tema de Guardar archivos en BD tipo vídeos, pdfs, imágenes... ¿filestream es la solución? en el foro de SQL Server en Foros del Web. Hola, tengo una duda, he estado leyendo acerca de como guardar archivos pesados en una BD SQL (videos,etc..). No tengo nada de experiencia en este ...
  #1 (permalink)  
Antiguo 28/04/2014, 05:55
 
Fecha de Ingreso: abril-2014
Ubicación: Plymouth, Inglaterra
Mensajes: 14
Antigüedad: 10 años
Puntos: 0
Pregunta Guardar archivos en BD tipo vídeos, pdfs, imágenes... ¿filestream es la solución?

Hola, tengo una duda, he estado leyendo acerca de como guardar archivos pesados en una BD SQL (videos,etc..).

No tengo nada de experiencia en este aspecto pero soy consciente de que el problema es que son muy pesados ...he leido que con FILESTREAM, con un campo tipo varbinary(max) podría salir del paso...son archivos de entre 200kb de alguna imagen hasta el más pesado de 5mb(vídeo),pdfs en torno a 1mb, y así... en el cómputo serán cosa de 3 vídeos ,15 pdfs y 15 imágenes, no más...

¿podría realizar esto con filestream? ¿al devolverme un objeto al usar una transacción podría visualizar esto por medio de javascript??

Gracias y un saludo
  #2 (permalink)  
Antiguo 28/04/2014, 11:19
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Guardar archivos en BD tipo vídeos, pdfs, imágenes... ¿filestream es la so

La respuesta es- si: el sistema almacena los archivos separados de los archivos de datos (mdf, ndf).
La opcion Filestream existe a partir de 2008,
pero solamente en 2012 tiene un interfaz comodo.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #3 (permalink)  
Antiguo 28/04/2014, 17:27
 
Fecha de Ingreso: abril-2014
Ubicación: Plymouth, Inglaterra
Mensajes: 14
Antigüedad: 10 años
Puntos: 0
Respuesta: Guardar archivos en BD tipo vídeos, pdfs, imágenes... ¿filestream es la so

A ver que tengo un lio...............para empezar gracias por reponder. Resumidamente lo que necesito hacer es recoger los datos(pdfs, videos,fotos de una BD en el servidor y pasarles,por JSON a una BD local y actualizarla, porque es la que utilizaré cuando no tenga conexión)

Para empezar he tenido serios problemas para crear el fileStream, vamos que se supone que tenía que habilitarlo en sql server (cosa que me ha sido imposible,tengo SQL 2012), después de mucho leer (durante 7 horas de trabajo) me he aventurado a picar código intentando seguir ejemplos de aquí y allá...

He creado una tabla en SQL server 2012 con id, name e image(esta última tipo varbinary(max).

Después he realizado una Insert direactamente de otro ejemplo que he encontrado diciendo la ruta del archivo que quería guardar.....

Al hacer una selec para comprobar desde el propio SQL que tenía algo guardado salí algo así....

0x89504E470D0A1A0A0000000D494844520000010200000102 0806000000154FD950000000097048597300000B1300000B13 01009A9C18000000206348524D00007A25000080830000F9FF 000080E9000075300000EA6000003A980000176F925FC54600 00BFCE4944415478DAEC9D75B864D595F67F5BCE3925D7DBBB 69A091469A46032448828518B1894F88129B18439299CCC465 E2FA4DDC3371924020687008EEEE0E4DEBEDAB2547F6DEDF1F FB54DDBAD2064D20C959CF731FE8EEBA55A7CED97BEDB5DEF5 AE7709EB9CA3C3EAF594471F798CEBAFBF9E6AB51B639B1456 58617F9F260869369B944A21D5AE32BBEEBA0BDB6C339F4623 A65C8E1080730E61AC73C6C0D8D818A79D763A679F7D162F7C C10B38EAA82349D314298B9B5958617FCFAE406B4D1CC7AC1F 1AE2073FF8112F3EE645ECF78C0398356B8040E7AFB2CE3B82 1FFDE887ECB8E38E1C79C461C862F71756D83FAC3DF8E023BC EB5DEFE737BFF92DB36695BD234833E74E3DF534D6AE59C53B DFF9B6E22E1556D83F81DD77DFC3DC7FFF831C7DF473700EA4 5270F9659772DC716F29EE4E6185FD93D88E3B6ECB8F7FFC73 4647C71102E4F0508391D151B456900307851556D83FBEBDE2 152FE6BE7B1FC01A906363631C71F81113D08210C51D2AACB0 7F02DBFF80BD59B162854F0D9224432955DC95C20AFB273329 05C6189402E94890AA88020A2BEC9FCE11088DC5E1041475C2 C20A2BAC700485155658E1080A2BACB0C21114565861852328 ACB0C20A4750586185158EA0B0C20A2B1C41618515563882C2 0A2BAC700485155658E1080A2BACB0C21114565861852328AC B0C20A4750586185158EA0B0C20A9BEA08522331B690272BAC B07F6A47208428E4C90A2BEC9FDD1148298B39068515F6CFEE 080AD5E2C20A2B4C5A6B8BBB505861FFEC8E204D538C31C59D 28ACB07F76475044058515F64FEE08B22C2BA61B1556D83FBB 23E8EDED2D069C1456D83FBB23286E41618515A6FF1E2EB293 EF5464318515F64FE20836C6749CEC14FE0EBC8200C1E3636E 6EE8FB4DBD3F05C653D83F9423682DF0756B86B8FCEA9B39EF FCABB8E3DE87191C19470A41146A7659B20D871FBE3FCFDC6F 193B2FDDEE69BF116C66B9ECAA9B191E1947AA4D6462CE0FA6 DC66EE2C162D9ACBAC39FD337EBFBBEF7D983BEE7C0021257B ECB6034BB65F58ACE4C2FE311C811082244EF8F6774FE447BF 3C8D3BEF7DD8E701D6418BE72005975F79333FFBCD19CC9ED3 CFAB5F7A24FFFDC137B1CDE2794F4B872084206EC6BCE784AF 70EB75B74329DCAC3C68D6402FB366F771E421FBF2EFEF7D2D 4B976EDFFE6E42087EFD87BFF0998F7C0D44C8D7BEF69F7CE0 84638BA8A0B0BF7F472084E0918757F2EE13BECCE97FB91C11 6A1082402BB659348F050BE700501B6F70DFFD8F303E5E67FD C838DFFDF11F39E32F97F1DDAF7D8817BEF05084104F4B67D0 DD5541F676512E85D41B4D5C9CB2C16CC1C1E0D008EBC7C6B9 FBEE0739E5CC8BF9F1B73ECA0B5F7048FBBB95A210CADDC828 248A82621517F6F7EF088410AC58B1867F39F6BFB9F6FA3B08 CA11CE185EF2C24379FB9B5FC61EBBEFC0368BE703D0AC37B9 FEC6BBF8E32917F0AB3FFE85C1E131
etc etc etcetcetc

El asunto es el siguiente ( tengo que conseguir sacar los datos de una BD alojada en el servidor ( al que accedo por medio de asp.net) y cuando mi app tenga Internet con un script y por medio de JSON pasar el dato para actualizar la tabla de la BD local...


ahora eso en el paso de asp.net,realizo la conexión y pido el dato desde una select (la imagen tipo varbinary alojada en la bd) y mediante un for así lo paso a String...

For i = 0 To s2.Length - 1
aux.Name = aux.Name & s2(i) & " :"
Next

saco algo que es totalmente diferente a lo de arriba, entiendo que al ser codificado por el tema de los bytes puede estar bien......(adjunto trozo de código,he puesto entre posición del array : porque intuyo que luego tendré que tomar ese patrón para separarlos al volverlos a guardar, ya no se si está bien ó no realmente)

137 :80 :78 :71 :13 :10 :26 :10 :0 :0 :0 :13 :73 :72 :68 :82 :0 :0 :1 :2 :0 :0 :1 :2 :8 :6 :0 :0 :0 :21 :79 :217 :80 :0 :0 :0 :9 :112 :72 :89 :115 :0 :0 :11 :19 :0 :0 :11 :19 :1 :0 :154 :156 :24 :0 :0 :0 :32 :99 :72 :82 :77 :0 :0 :122 :37 :0 :0 :128 :131 :0 :0 :249 :255 :0 :0 :128 :233 :0 :0 :117 :48 :0 :0 :234 :96 :0 :0 :58 :152 :0 :0 :23 :111 :146 :95 :197 :70 :0 :0 :191 :206 :73 :68 :65 :84 :120 :218 :236 :157 :117 :184 :100 :213 :149 :246 :127 :91 :206 :57 :37 :215 :219 :187 :105 :160 :145 :70 :154 :70 :3 :36 :72 :130 :133 :24 :177 :137 :79 :136 :18 :155 :24 :67 :146 :153 :204 :196 :101 :226 :250 :77 :220 :51 :113 :146 :64 :32 :104 :112 :8 :238 :238 :14 :77 :235 :237 :171 :37 :71 :246 :222 :223 :31 :251 :84 :221 :186 :210 :6 :77 :32 :201 :89 :207 :115 :31 :232 :238 :186 :85 :167 :206 :217 :123 :237 :181 :222 :245 :174 :119 :9 :235 :156 :163 :195 :234 :245 :148 :71 :31 :121 :140 :235 :175 :191 :158 :106 :181 :27 :99 :155 :20 :86 :88 :97 :127 :159 :38 :8 :105 :54 :155 :148 :74 :33 :213 :174 :50 :187 :238 :186 :11 :219 :108 :51 :159 :70 :35 :166 :92 :142 :16 :128 :115 :14 :97 :172 :115 :198 :192 :216 :216 :24 :167 :157 :118 :58 :103 :159 :125 :22 :47 :124 :193 :11 :56 :234 :168 :35 :73 :211 :20 :41 :139 :155 :89 :88 :97 :127 :207 :174 :64 :107 :77 etc etc etc etc...

y ahora tengo que pasar todo esto por JSON, que entiendo que sólo es capaz de devolver String, por lo tanto tengo que separarlo digamos en tokens para guardarlo en la BD local...

por si fuera poco luego tengo que utilizarlo y pasarlo a imagen para poder visualizarlo ,después de guardarlo en la BD local (mi app tiene que funcionar sin conexión...por esto todo el paripé...)

Si me podeis echar una mano de si voy bien, voy mal, si me he montado una película de miedo ó adjuntarme algun ejemplo que case con lo que yo quiero hacer os lo agradezo 1000 !

HELP PLIZ!
  #4 (permalink)  
Antiguo 28/04/2014, 21:20
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Guardar archivos en BD tipo vídeos, pdfs, imágenes... ¿filestream es la so

hay algo que se llama serializacion y deserializacion, para esto investiga un poco mas porque te estas complicando demasiado:

http://www.c-sharpcorner.com/Intervi...ization-and-wh ademas te recomiendo que preguntes en el foro de programacion no aqui.....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 29/04/2014, 16:24
 
Fecha de Ingreso: abril-2014
Ubicación: Plymouth, Inglaterra
Mensajes: 14
Antigüedad: 10 años
Puntos: 0
Respuesta: Guardar archivos en BD tipo vídeos, pdfs, imágenes... ¿filestream es la so

El concepto de serialización y deserialización creo que le he cogido, el tema es más que nada si me podeis decir si es viable ó no meter los datos que quiero en un VARBINARY(MAX) y si luego voy a poder recuperarles en javascript.

Me cambio de sección para el tema de conversiones,

gracias
  #6 (permalink)  
Antiguo 29/04/2014, 17:07
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Guardar archivos en BD tipo vídeos, pdfs, imágenes... ¿filestream es la so

para que los recuperes tienen que estar en tipo byte, para poder hacer la conversion al objeto, si quieres complicarte la vida obteniendo los valores como si fueran datos de tipo cadena es tu problema, pero si te digo que el tipo varchar no fue creado para ese tipo de operaciones
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 30/04/2014, 03:12
 
Fecha de Ingreso: abril-2014
Ubicación: Plymouth, Inglaterra
Mensajes: 14
Antigüedad: 10 años
Puntos: 0
Respuesta: Guardar archivos en BD tipo vídeos, pdfs, imágenes... ¿filestream es la so

no es por querer complicarme la vida ,es que sino me equivoco con JSON los datos pasan como cadena....si me equivoco en esto último por favor decirme.

Voy a ver si encuentro otra alternativa de todas maneras.

Y gracias por molestarte en contestar :D

Última edición por javier85rodriguezg; 30/04/2014 a las 03:31
  #8 (permalink)  
Antiguo 30/04/2014, 16:12
 
Fecha de Ingreso: abril-2014
Mensajes: 32
Antigüedad: 10 años
Puntos: 0
Respuesta: Guardar archivos en BD tipo vídeos, pdfs, imágenes... ¿filestream es la so

Bueno, para guardar los archivos (aunque veo que ya lo haces) seria algo así:

http://support.microsoft.com/default.aspx?scid=kb;en-us;308042

Pero a parte de guardar el nombre del archivo también te recomiendo guardar el MIME Types

https://www.sitepoint.com/web-foundations/mime-types-complete-list/

Y para transportar el archivo ya sea desde el servidor al local o desde la local a tu pagina web (si es para esto que lo usas)
Yo lo haría con un Handler (.ashx)

http://www.dotnetperls.com/ashx

Esta pagina te regresara el stream de data que guardaras en tu base de datos local (usándola como si fuera un webservice, pasándole los parámetros por la URL)

Pero también podrás usarla para presentar el contenido en una aplicación web, para esto es que usaras el MIME del archivo (así en vez de guardar la información a disco para luego poder usarla desde la web, llamaras al ashx, el cual la leerá de la base de datos y regresara el contenido indicando de que tipo es; para el navegador será como si pidiera un archivo X -PDF, JPG, MP4, etc...-).

Y si prefieres hacerlo con JSON, una opción rápida es utilizar Base64 para convertir la data en cadena de caracteres.

Última edición por rmaeloy; 30/04/2014 a las 16:39
  #9 (permalink)  
Antiguo 02/05/2014, 03:45
 
Fecha de Ingreso: abril-2014
Ubicación: Plymouth, Inglaterra
Mensajes: 14
Antigüedad: 10 años
Puntos: 0
Respuesta: Guardar archivos en BD tipo vídeos, pdfs, imágenes... ¿filestream es la so

Uf, todo lo que me cuentas nuevo para mi... no se si será demasiado...de momento estoy en este punto, descargo los datos string de la BD del servidor con JSON a la BD y lo alojo.

Por otro lado descargo del servidor los ficheros como fotos,etc...FTP.

Creo que no voy por el mal camino, no obstante si la app me da problemas por el peso de la transferencia de información utilizará otras alternativas.

Muchas gracias por el aporte

Etiquetas: bd, campo, pdfs, sql, tipo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:17.