Programación Web y Scripting > ASP

 Descargar Una Imagen A Una Bd

(1/1)

oonai:
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

oonai:
:comp: Sigon intentando algunas ideas , pero aun no logro el objetivo.... Requiero Ayuda

Mollense:
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 --- <%On Error Resume Next%><%  Class miGrua    Public sub TomarDatos()      dim Datos, cantidadBytes, posActual, posSiguiente, largoPalabra      dim nombre, datosArchivo, tipo      cantidadBytes=Request.TotalBytes      Datos = Request.BinaryRead(cantidadBytes)         posActual=1                   'impr Datos,  cantidadBytes      'Response.write "<br><br><br>"                'Extraer nombre del album      posActual = InStrB(posActual, Datos, aBinario("NombreAlbum")) + 13      posActual = InStrB(posActual, Datos, aBinario(Chr(13))) + 2      posSiguiente=InStrB(posActual, Datos, aBinario("---")) - 2      largoPalabra=posSiguiente-posActual          NombreAlbum = aCadena(MidB(Datos, posActual,largoPalabra))                'Extraer tipo de album      posActual = InStrB(posActual, Datos, aBinario("TipoAlbum")) + 11      posActual = InStrB(posActual, Datos, aBinario(Chr(13))) + 2      posSiguiente=InStrB(posActual, Datos, aBinario("---")) - 2      largoPalabra=posSiguiente-posActual          TipoAlbum = aCadena(MidB(Datos, posActual,largoPalabra))      'Response.write "Alb: " & TipoAlbum & "<br>"      'Response.write "Alb" & NombreAlbum & "<br>"       'Registrar el nuevo album      codigoAlbum = RegistrarAlbum(NombreAlbum, Session("Usuario"),TipoAlbum)      if(codigoAlbum=-1)then        Response.write "<br> Error interno: Imposible guardar el album <br>"         ObjectContext.SetAbort        exit sub      end if            Response.write "<h2>Sus recuerdos están seguros en su<BR>ESPACIO PERSONAL</h2>"            Response.write "<table align=Center border=1>"        Response.write "<tr><td colspan=2 align=center><b>" & NombreAlbum & "</b></td></tr>"      do until posActual=10 or posActual>=cantidadBytes        posActual = InStrB(posActual, Datos, aBinario("filename=")) + 10        if(posActual>10)then          'Extraer nombre de la imagen          posSiguiente=InStrB(posActual, Datos, aBinario("Content-Type"))-3          largoPalabra=posSiguiente-posActual              nombre = aCadena(MidB(Datos, posActual,largoPalabra))          nombre = Right(nombre, Len(nombre)-InStrRev(nombre,"\"))          'Response.write nombre & "<br>"                    'Extraer tipo de archivo  (.gif, .jpj, etc)          tipo = Right(nombre, Len(nombre)-InStrRev(nombre,".")+1)          'Response.write tipo & "<br>"                                                       'Quitar extención al nombre          nombre = Left(nombre, Len(nombre)-Len(tipo))          'Response.write nombre & "<br>"                    'Extraer datos de archivo          posActual = InStrB(posActual, Datos, aBinario("Content-Type")) + 14          posActual = InStrB(posActual, Datos, aBinario(Chr(13))) + 2          posSiguiente=InStrB(posActual, Datos, aBinario("---")) - 2          largoPalabra=posSiguiente-posActual          largoDatos=largoPalabra          datosArchivo = MidB(Datos, posActual,largoPalabra)          'impr datosArchivo,  largoPalabra          'Response.write "<br>"                                    'Extraer tipo de la imagen (Publica o privada)          posActual = InStrB(posActual, Datos, aBinario("TipoImagen"))          posActual = InStrB(posActual, Datos, aBinario("P"))          posSiguiente=InStrB(posActual, Datos, aBinario("---")) - 2          largoPalabra=posSiguiente-posActual              TipoImagen = aCadena(MidB(Datos, posActual,largoPalabra))          'Response.write TipoImagen & "<br>"                    if(Len(datosArchivo)>1)then            'Guardar los Archivos de imagen            guardarArchivo nombre, datosArchivo, largoDatos, tipo, TipoImagen, exito            'Registrar los Archivos de imagen en la base de datos            if(exito="OK")then              codigo=RegistrarImagen(codigoAlbum, nombre & tipo, TipoImagen)              if(codigo=-1)then                Response.write "<br> Error interno: Imposible guardar la imagen <br>"                 ObjectContext.SetAbort                exit sub              end if            end if          end if        end if      loop      Response.write "</table>"       ObjectContext.SetComplete      %>          <!--#include file= "includes\Error.inc"-->      <%    end sub        Private Function aBinario ( str )       Dim i, strbuf       for i = 1 to Len(str)         strbuf = strbuf & ChrB (AscB (Mid(str, i, 1)))      next       aBinario = strbuf     End Function     Private Function aCadena ( bin )       Dim i, bytebuf       for i = 1 to LenB(bin)         bytebuf = bytebuf & Chr(AscB(MidB(bin, i, 1)))      next       aCadena = bytebuf     End Function         Private Sub impr( bin, bytes )       Dim i, bytebuf       for i = 1 to bytes        Response.write Server.HTMLEncode(ChrB(AscB(MidB(bin, i, 1))))      next     End Sub         Private Sub guardarArchivo(byRef nombre, byRef datos, bytes, ext, TipoImagen, byRef result)      dim ruta, archivo, aceptar, aux, subindice                     select case(lCase(ext))        case ".gif"          aceptar="si"        case ".jpg"          aceptar="si"        case else          aceptar="no"      end select            if(aceptar="no")then        Response.write "Formato no permitido: " & ext & "<br>"        result="NO"        exit sub      end if            ruta=request.serverVariables("APPL_PHYSICAL_PATH") & "Archivos\"      archivo = ruta & nombre  & ext            set confile = createObject("scripting.filesystemobject")            subindice=1      aux=""            do while(confile.fileExists(archivo))        aux = nombre & subindice        subindice=subindice+1        archivo = ruta & aux & ext      loop          if(aux<>"")then nombre=aux      'Response.write archivo & "<br>"            set fich = confile.CreateTextFile(archivo, true)       for i=3 to bytes        c=Chr(AscB(midB(datos,i,1)))        fich.write(c)       next       fich.close()      Response.write "<tr>"        Response.write "<td>" & nombre & ext & ", " & tamanio(bytes)              Response.write "<br>" & TipoImagen  & "</td>"        Response.write "<td align=center><img src=Archivos/" & nombre & ext & " WIDTH=120 HEIGHT=100></td>"      Response.write "<tr>"             Set confile=Nothing      set fich=Nothing             %>          <!--#include file= "includes\Error.inc"-->      <%            result="OK"    End Sub        Private Function tamanio( bytes )       Dim MB, KB, m, z      m=1024*1024      MB=0      KB=0      do while(bytes>m)        MB=MB+1        bytes=bytes-m      loop      do while(bytes>1024)        KB=KB+1        bytes=bytes-1024      loop      z=""      if(MB>0)then z = MB & " MB "      if(KB>0)then z = z & KB & " KB "      if(bytes>0)then z = z & bytes & " bytes"      tamanio=z    End Function                  Private Function RegistrarAlbum(nombreAlbum, usuario, TipoAlbum)       Const adOpenKeyset = 1      Const adLockOptimistic = 3        Set Conn = Server.CreateObject("ADODB.Connection")      if(Conn.state)then        Conn.Close()      end if      Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\bd.mdb"))        'Ver si existe el album      sqlTxt = "SELECT CodigoAlbum FROM Albunes WHERE NombreAlbum = '" & nombreAlbum & "'"      set rs=createobject("ADODB.Recordset")      if(rs.state)then        rs.Close()      end if      rs.LockType = adLockOptimistic      rs.Open sqltxt, Conn            'Si no existe, crearlo      if(rs.eof)then         if(rs.state)then          rs.Close()        end if        sqltxt="INSERT INTO Albunes(NombreAlbum,Usuario,TipoAlbum) Values("        sqltxt=sqltxt & "'" & nombreAlbum & "'"        sqltxt=sqltxt & ",'" & usuario & "'"        sqltxt=sqltxt & ",'" & TipoAlbum & "')"         Set Cmd  = CreateObject("ADODB.Command")        Cmd.CommandText = sqltxt        Cmd.ActiveConnection=Conn        Cmd.Execute        Set Cmd=Nothing                         'Ver si está correctamente registrado        sqlTxt = "SELECT CodigoAlbum FROM Albunes WHERE NombreAlbum = '" & nombreAlbum & "'"        set rs=createobject("ADODB.Recordset")        if(rs.state)then          rs.Close()        end if        rs.LockType = adLockOptimistic        rs.Open sqltxt, Conn        if(rs.eof)then          codigo=-1        else          codigo=rs.Fields("CodigoAlbum")          Response.write "<h2><B>Un nuevo album a sido creado.</B></h2>"        end if      else        codigo=rs.Fields("CodigoAlbum")        Response.write "<h2><B>El album ya existe, las imagenes serán anexadas a éste.</B></h2>"      end if                             Set Conn=Nothing      set rs=Nothing            %>          <!--#include file= "includes\Error.inc"-->      <%            RegistrarAlbum=codigo          End Function            Private Function RegistrarImagen(codigoAlbum, imagen, TipoImagen)            Const adOpenKeyset = 1      Const adLockOptimistic = 3        Set Conn = Server.CreateObject("ADODB.Connection")      if(Conn.state)then        Conn.Close()      end if      Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\bd.mdb"))        sqltxt="INSERT INTO Imagenes(codigoAlbum,imagen,TipoImagen) Values("      sqltxt=sqltxt & "'" & codigoAlbum & "'"      sqltxt=sqltxt & ",'" & imagen & "'"      sqltxt=sqltxt & ",'" & TipoImagen & "')"      'Response.Write sqltxt & "<BR>"            Set Cmd  = CreateObject("ADODB.Command")      Cmd.CommandText = sqltxt      Cmd.ActiveConnection=Conn      Cmd.Execute      Set Cmd=Nothing            sqlTxt = "SELECT CodigoAlbum FROM Imagenes WHERE CodigoAlbum = " & codigoAlbum & " AND imagen = '" & imagen & "'"      'Response.Write sqltxt & "<BR>"            set rs=createobject("ADODB.Recordset")      if(rs.state)then        rs.Close()      end if      rs.LockType = adLockOptimistic      rs.Open sqltxt, Conn      if(rs.eof)then        codigo=-1      else        codigo=rs.Fields("CodigoAlbum")      end if        Set Conn=Nothing      set rs=Nothing            %>          <!--#include file= "includes\Error.inc"-->      <%            RegistrarImagen=codigo    End Function    end class%>  
Bueno....ya se fue un poco extenso no?

Nos veremos :hola:

Navegación

[0] Índice de Mensajes

Ir a la versión completa