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
Ir a la versión completa