• Jueves 14 de Noviembre de 2024, 04:20

Autor Tema:  Descargar Una Imagen A Una Bd  (Leído 2513 veces)

oonai

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Descargar Una Imagen A Una Bd
« en: Viernes 6 de Enero de 2006, 16:28 »
0
Salud2 y feliz año 2006 a la comunidad de este foro. Mi pregunta es sencilla, pero despues de muchos tragos. la cabeza no da mas... Estoy creando un periodico vecinal, ya camina en su totalidad, ahora deseo que el usuario que esta creando la noticia, descarge a la bd access una imagen de su seleccion. Esta rutina no ha funcionado. Deseo saber si alguin conoce algun sitio dende explique esta rutina con detenimiento. GRAcias
Si  deseas  disfrutar del arco iris, primero deberás soportar la lluvia " Dolly Parton, USA "

oonai

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Descargar Una Imagen A Una Bd
« Respuesta #1 en: Lunes 6 de Febrero de 2006, 18:49 »
0
:comp: Sigon intentando algunas ideas , pero aun no logro el objetivo.... Requiero Ayuda
Si  deseas  disfrutar del arco iris, primero deberás soportar la lluvia " Dolly Parton, USA "

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Descargar Una Imagen A Una Bd
« Respuesta #2 en: Martes 24 de Octubre de 2006, 06:31 »
0
La verdad es que nunca he guardado una imágen en una BD, lo que he hecho es subir una imágen que el usuario posée en su dísco y guardarla en el servidor al mismo tiempo que la registraba en la base de datos.

La forma de hacerlo hera agregando...

enctype="multipart/form-data"

dentro de la declaración del Form en el que se encontraban varios Input del tipo File

luego de que el usuario precionaba el botón submit, la página que lo recibía leía byte por byte extrallendo el típo de archivo el tamaño etc, etc.

Para esto utilizaba algo como esto:

Código: Text
  1.  
  2. <%On Error Resume Next%>
  3. <%
  4.   Class miGrua
  5.     Public sub TomarDatos()
  6.       dim Datos, cantidadBytes, posActual, posSiguiente, largoPalabra
  7.       dim nombre, datosArchivo, tipo
  8.       cantidadBytes=Request.TotalBytes
  9.       Datos = Request.BinaryRead(cantidadBytes)  
  10.       posActual=1
  11.              
  12.       'impr Datos,  cantidadBytes
  13.       'Response.write "<br><br><br>"  
  14.        
  15.       'Extraer nombre del album
  16.       posActual = InStrB(posActual, Datos, aBinario("NombreAlbum")) + 13
  17.       posActual = InStrB(posActual, Datos, aBinario(Chr(13))) + 2
  18.       posSiguiente=InStrB(posActual, Datos, aBinario("---")) - 2
  19.       largoPalabra=posSiguiente-posActual    
  20.       NombreAlbum = aCadena(MidB(Datos, posActual,largoPalabra))
  21.          
  22.       'Extraer tipo de album
  23.       posActual = InStrB(posActual, Datos, aBinario("TipoAlbum")) + 11
  24.       posActual = InStrB(posActual, Datos, aBinario(Chr(13))) + 2
  25.       posSiguiente=InStrB(posActual, Datos, aBinario("---")) - 2
  26.       largoPalabra=posSiguiente-posActual    
  27.       TipoAlbum = aCadena(MidB(Datos, posActual,largoPalabra))
  28.       'Response.write "Alb: " & TipoAlbum & "<br>"
  29.       'Response.write "Alb" & NombreAlbum & "<br>"
  30.  
  31.       'Registrar el nuevo album
  32.       codigoAlbum = RegistrarAlbum(NombreAlbum, Session("Usuario"),TipoAlbum)
  33.       if(codigoAlbum=-1)then
  34.         Response.write "<br> Error interno: Imposible guardar el album <br>"
  35.         ObjectContext.SetAbort
  36.         exit sub
  37.       end if
  38.      
  39.       Response.write "<h2>Sus recuerdos están seguros en su<BR>ESPACIO PERSONAL</h2>"
  40.      
  41.       Response.write "<table align=Center border=1>"
  42.         Response.write "<tr><td colspan=2 align=center><b>" & NombreAlbum & "</b></td></tr>"
  43.       do until posActual=10 or posActual>=cantidadBytes
  44.         posActual = InStrB(posActual, Datos, aBinario("filename=")) + 10
  45.         if(posActual>10)then
  46.           'Extraer nombre de la imagen
  47.           posSiguiente=InStrB(posActual, Datos, aBinario("Content-Type"))-3
  48.           largoPalabra=posSiguiente-posActual    
  49.           nombre = aCadena(MidB(Datos, posActual,largoPalabra))
  50.           nombre = Right(nombre, Len(nombre)-InStrRev(nombre,"\"))
  51.           'Response.write nombre & "<br>"
  52.          
  53.           'Extraer tipo de archivo  (.gif, .jpj, etc)
  54.           tipo = Right(nombre, Len(nombre)-InStrRev(nombre,".")+1)
  55.           'Response.write tipo & "<br>"                            
  56.                  
  57.           'Quitar extención al nombre
  58.           nombre = Left(nombre, Len(nombre)-Len(tipo))
  59.           'Response.write nombre & "<br>"
  60.          
  61.           'Extraer datos de archivo
  62.           posActual = InStrB(posActual, Datos, aBinario("Content-Type")) + 14
  63.           posActual = InStrB(posActual, Datos, aBinario(Chr(13))) + 2
  64.           posSiguiente=InStrB(posActual, Datos, aBinario("---")) - 2
  65.           largoPalabra=posSiguiente-posActual
  66.           largoDatos=largoPalabra
  67.           datosArchivo = MidB(Datos, posActual,largoPalabra)
  68.           'impr datosArchivo,  largoPalabra
  69.           'Response.write "<br>"
  70.                
  71.          
  72.           'Extraer tipo de la imagen (Publica o privada)
  73.           posActual = InStrB(posActual, Datos, aBinario("TipoImagen"))
  74.           posActual = InStrB(posActual, Datos, aBinario("P"))
  75.           posSiguiente=InStrB(posActual, Datos, aBinario("---")) - 2
  76.           largoPalabra=posSiguiente-posActual    
  77.           TipoImagen = aCadena(MidB(Datos, posActual,largoPalabra))
  78.           'Response.write TipoImagen & "<br>"
  79.          
  80.           if(Len(datosArchivo)>1)then
  81.             'Guardar los Archivos de imagen
  82.             guardarArchivo nombre, datosArchivo, largoDatos, tipo, TipoImagen, exito
  83.             'Registrar los Archivos de imagen en la base de datos
  84.             if(exito="OK")then
  85.               codigo=RegistrarImagen(codigoAlbum, nombre & tipo, TipoImagen)
  86.               if(codigo=-1)then
  87.                 Response.write "<br> Error interno: Imposible guardar la imagen <br>"
  88.                 ObjectContext.SetAbort
  89.                 exit sub
  90.               end if
  91.             end if
  92.           end if
  93.         end if
  94.       loop
  95.       Response.write "</table>"
  96.       ObjectContext.SetComplete
  97.       %>    
  98.       <!--#include file= "includes\Error.inc"-->
  99.       <%
  100.     end sub
  101.    
  102.     Private Function aBinario ( str )
  103.       Dim i, strbuf
  104.       for i = 1 to Len(str)
  105.         strbuf = strbuf & ChrB (AscB (Mid(str, i, 1)))
  106.       next
  107.       aBinario = strbuf
  108.     End Function
  109.  
  110.     Private Function aCadena ( bin )
  111.       Dim i, bytebuf
  112.       for i = 1 to LenB(bin)
  113.         bytebuf = bytebuf & Chr(AscB(MidB(bin, i, 1)))
  114.       next
  115.       aCadena = bytebuf
  116.     End Function
  117.    
  118.     Private Sub impr( bin, bytes )
  119.       Dim i, bytebuf
  120.       for i = 1 to bytes
  121.         Response.write Server.HTMLEncode(ChrB(AscB(MidB(bin, i, 1))))
  122.       next
  123.     End Sub
  124.    
  125.     Private Sub guardarArchivo(byRef nombre, byRef datos, bytes, ext, TipoImagen, byRef result)
  126.       dim ruta, archivo, aceptar, aux, subindice        
  127.      
  128.       select case(lCase(ext))
  129.         case ".gif"
  130.           aceptar="si"
  131.         case ".jpg"
  132.           aceptar="si"
  133.         case else
  134.           aceptar="no"
  135.       end select
  136.      
  137.       if(aceptar="no")then
  138.         Response.write "Formato no permitido: " & ext & "<br>"
  139.         result="NO"
  140.         exit sub
  141.       end if
  142.      
  143.       ruta=request.serverVariables("APPL_PHYSICAL_PATH") & "Archivos\"
  144.       archivo = ruta & nombre  & ext
  145.      
  146.       set confile = createObject("scripting.filesystemobject")
  147.      
  148.       subindice=1
  149.       aux=""      
  150.       do while(confile.fileExists(archivo))
  151.         aux = nombre & subindice
  152.         subindice=subindice+1
  153.         archivo = ruta & aux & ext
  154.       loop    
  155.       if(aux<>"")then nombre=aux
  156.       'Response.write archivo & "<br>"
  157.      
  158.       set fich = confile.CreateTextFile(archivo, true)
  159.       for i=3 to bytes
  160.         c=Chr(AscB(midB(datos,i,1)))
  161.         fich.write(c)
  162.       next
  163.       fich.close()
  164.       Response.write "<tr>"
  165.         Response.write "<td>" & nombre & ext & ", " & tamanio(bytes)      
  166.         Response.write "<br>" & TipoImagen  & "</td>"
  167.         Response.write "<td align=center><img src=Archivos/" & nombre & ext & " WIDTH=120 HEIGHT=100></td>"
  168.       Response.write "<tr>"
  169.      
  170.       Set confile=Nothing
  171.       set fich=Nothing
  172.      
  173.       %>    
  174.       <!--#include file= "includes\Error.inc"-->
  175.       <%
  176.      
  177.       result="OK"
  178.     End Sub
  179.    
  180.     Private Function tamanio( bytes )
  181.       Dim MB, KB, m, z
  182.       m=1024*1024
  183.       MB=0
  184.       KB=0
  185.       do while(bytes>m)
  186.         MB=MB+1
  187.         bytes=bytes-m
  188.       loop
  189.       do while(bytes>1024)
  190.         KB=KB+1
  191.         bytes=bytes-1024
  192.       loop
  193.       z=""
  194.       if(MB>0)then z = MB & " MB "
  195.       if(KB>0)then z = z & KB & " KB "
  196.       if(bytes>0)then z = z & bytes & " bytes"
  197.       tamanio=z
  198.     End Function
  199.          
  200.    
  201.     Private Function RegistrarAlbum(nombreAlbum, usuario, TipoAlbum)
  202.  
  203.       Const adOpenKeyset = 1
  204.       Const adLockOptimistic = 3
  205.  
  206.       Set Conn = Server.CreateObject("ADODB.Connection")
  207.       if(Conn.state)then
  208.         Conn.Close()
  209.       end if
  210.       Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\bd.mdb"))
  211.  
  212.       'Ver si existe el album
  213.       sqlTxt = "SELECT CodigoAlbum FROM Albunes WHERE NombreAlbum = '" & nombreAlbum & "'"
  214.       set rs=createobject("ADODB.Recordset")
  215.       if(rs.state)then
  216.         rs.Close()
  217.       end if
  218.       rs.LockType = adLockOptimistic
  219.       rs.Open sqltxt, Conn
  220.      
  221.       'Si no existe, crearlo
  222.       if(rs.eof)then
  223.         if(rs.state)then
  224.           rs.Close()
  225.         end if
  226.         sqltxt="INSERT INTO Albunes(NombreAlbum,Usuario,TipoAlbum) Values("
  227.         sqltxt=sqltxt & "'" & nombreAlbum & "'"
  228.         sqltxt=sqltxt & ",'" & usuario & "'"
  229.         sqltxt=sqltxt & ",'" & TipoAlbum & "')"
  230.  
  231.         Set Cmd  = CreateObject("ADODB.Command")
  232.         Cmd.CommandText = sqltxt
  233.         Cmd.ActiveConnection=Conn
  234.         Cmd.Execute
  235.         Set Cmd=Nothing        
  236.        
  237.         'Ver si está correctamente registrado
  238.         sqlTxt = "SELECT CodigoAlbum FROM Albunes WHERE NombreAlbum = '" & nombreAlbum & "'"
  239.         set rs=createobject("ADODB.Recordset")
  240.         if(rs.state)then
  241.           rs.Close()
  242.         end if
  243.         rs.LockType = adLockOptimistic
  244.         rs.Open sqltxt, Conn
  245.         if(rs.eof)then
  246.           codigo=-1
  247.         else
  248.           codigo=rs.Fields("CodigoAlbum")
  249.           Response.write "<h2><B>Un nuevo album a sido creado.</B></h2>"
  250.         end if
  251.       else
  252.         codigo=rs.Fields("CodigoAlbum")
  253.         Response.write "<h2><B>El album ya existe, las imagenes serán anexadas a éste.</B></h2>"
  254.       end if          
  255.            
  256.       Set Conn=Nothing
  257.       set rs=Nothing
  258.      
  259.       %>    
  260.       <!--#include file= "includes\Error.inc"-->
  261.       <%
  262.      
  263.       RegistrarAlbum=codigo
  264.      
  265.     End Function
  266.    
  267.    
  268.     Private Function RegistrarImagen(codigoAlbum, imagen, TipoImagen)
  269.      
  270.       Const adOpenKeyset = 1
  271.       Const adLockOptimistic = 3
  272.  
  273.       Set Conn = Server.CreateObject("ADODB.Connection")
  274.       if(Conn.state)then
  275.         Conn.Close()
  276.       end if
  277.       Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\bd.mdb"))
  278.  
  279.       sqltxt="INSERT INTO Imagenes(codigoAlbum,imagen,TipoImagen) Values("
  280.       sqltxt=sqltxt & "'" & codigoAlbum & "'"
  281.       sqltxt=sqltxt & ",'" & imagen & "'"
  282.       sqltxt=sqltxt & ",'" & TipoImagen & "')"
  283.       'Response.Write sqltxt & "<BR>"
  284.      
  285.       Set Cmd  = CreateObject("ADODB.Command")
  286.       Cmd.CommandText = sqltxt
  287.       Cmd.ActiveConnection=Conn
  288.       Cmd.Execute
  289.       Set Cmd=Nothing
  290.      
  291.       sqlTxt = "SELECT CodigoAlbum FROM Imagenes WHERE CodigoAlbum = " & codigoAlbum & " AND imagen = '" & imagen & "'"
  292.       'Response.Write sqltxt & "<BR>"
  293.      
  294.       set rs=createobject("ADODB.Recordset")
  295.       if(rs.state)then
  296.         rs.Close()
  297.       end if
  298.       rs.LockType = adLockOptimistic
  299.       rs.Open sqltxt, Conn
  300.       if(rs.eof)then
  301.         codigo=-1
  302.       else
  303.         codigo=rs.Fields("CodigoAlbum")
  304.       end if
  305.  
  306.       Set Conn=Nothing
  307.       set rs=Nothing
  308.      
  309.       %>    
  310.       <!--#include file= "includes\Error.inc"-->
  311.       <%
  312.      
  313.       RegistrarImagen=codigo
  314.     End Function  
  315.   end class
  316. %>
  317.  
  318.  

Bueno....ya se fue un poco extenso no?

Nos veremos :hola:
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.