Foros del Web » Programando para Internet » ASP Clásico »

Subir Imagen a una base de datos

Estas en el tema de Subir Imagen a una base de datos en el foro de ASP Clásico en Foros del Web. Amigos: El problema que tengo es poder llegar a subir una imagen a una base de datos. He leído los consejos de todos con respecto ...
  #1 (permalink)  
Antiguo 10/09/2004, 14:57
Avatar de armandoweb  
Fecha de Ingreso: enero-2003
Ubicación: San Cristobal, Santa Fe, Argentina
Mensajes: 544
Antigüedad: 21 años, 4 meses
Puntos: 7
Subir Imagen a una base de datos

Amigos:

El problema que tengo es poder llegar a subir una imagen a una base de datos.
He leído los consejos de todos con respecto a que no es aconsejable realizar esta operación, pero debo hacerlo ya que mi cliente quiere cargar por su cuenta noticias y articulos con una pequeña foto.
Como ven no tengo otra opción, así que necesito de su ayuda.
Tengo 4 campos que son: fecha, titulo, copete, noticia y el 5º que sería la imagen.
Por donde puedo empezar??? Algún código para estudiar, tutorial, etc???
Desde ya gracias....

ARIEL CRIPPA
  #2 (permalink)  
Antiguo 10/09/2004, 15:03
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Si tenés otra opción: Hacer el upload del archivo, y guardar en el campo "imagen" el nombre del archivo recién subido al servidor.

En un momento te paso un ejemplo.
__________________
...___...
  #3 (permalink)  
Antiguo 10/09/2004, 15:19
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Bueno, primero bajate el xElUpload desde http://www.aspfacil.com/codigo/xelupload.zip , y colocá el archivo xelupload.asp (los otros no son necesarios) en la misma carpeta que el ASP que va a hacer la subida de la imagen y va a guardar la noticia en la BD.

Luego, en ese ASP, hacés más o menos esto:


Código:
<!--#include file="xelupload.asp"-->
<%
' Subida de imágenes
set objUpload = new xelUpload
objUpload.Upload()

'Solo se instancia el objeto si se ha subido al menos una imagen, de lo contrario da errores
If objUpload.Ficheros.Count > 0 then
	'accedemos al fichero por su nombre en el formulario
	Set objFich = objUpload.Ficheros("file")
	
	'La guardo en el directorio images_noticias, con la fecha y hora de hoy, completa, como nombre:
	'lo siguiente es el nombre original del archivo:
	Nombre = Split(objFich.Nombre, ".")
	'y aquí obtengo la extensión del archivo original:
	Extension = Nombre(Ubound(Nombre))
	'Compongo el nuevo nombre de archivo para evitar duplicados y le agrego la extensión:
	strNombreFichero = Year(Now()) & Month(Now()) & Day(Now()) & Hour(Now()) & Minute(Now()) & Second(Now()) & "." & Extension
	'finalmente, lo guardo
	objFich.GuardarComo strNombreFichero, Server.MapPath("/images_noticias/")
End if

'ahora, almaceno en variables los datos a guardar en la BD
'IMPORTANTE: No se puede usar request.form. En su lugar, se usa el método Form de la clase objUpload
fecha = Replace(objUpload.Form("fecha"), "'", "''")
titulo = Replace(objUpload.Form("titulo"), "'", "''")
copete = Replace(objUpload.Form("copete"), "'", "''")
noticia = Replace(objUpload.Form("noticia"), "'", "''")

' hacés tu conexión a la BD...
'luego, insertás todo:
SQL = "INSERT INTO Noticias (fecha, titulo, copete, notica, imagen) VALUES ('"& fecha &"', '" & titulo & "', '" & copete & "', '" & noticia & "', '" & strNombreFichero & "')"
oConn.Execute (SQL)
%>

Saludos
__________________
...___...
  #4 (permalink)  
Antiguo 10/09/2004, 15:33
 
Fecha de Ingreso: julio-2002
Ubicación: Valparaiso
Mensajes: 152
Antigüedad: 21 años, 10 meses
Puntos: 0
<%
Set Upload = Server.CreateObject("Persits.Upload.1")

Upload.OverwriteFiles = False
Upload.SetMaxSize 1048576
Upload.SaveVirtual "../upload/" 'carpeta donde se guardaran las fotod

Set File = Upload.Files("file")
If Not File Is Nothing Then
con = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("clinica.mdb")
Set rs = Server.CreateObject("adodb.recordset")
SQL = "SELECT * FROM bebes"
rs.Open SQL, con, 2 ,3

rs.AddNew
rs("foto") = File.FileName ' Aqui hace referencia la foto
rs("nombres") = Upload.Form("nombres")
rs("apellidos") = Upload.Form("apellidos")
rs("nom_padre") = Upload.Form("n_padre")
rs("nom_madre") = Upload.Form("n_madre")
rs("fecha_nac") = Upload.Form("nacim_fecha")
rs("hora_nac") = Upload.Form("nacim_hora")
rs("peso") = Upload.Form("peso")
rs("altura") = Upload.Form("altura")
rs("sexo") = Upload.Form("sexo")
rs.Update

' rs.Close
' con.Close ' -->En esta linea marca un error
' set rs=nothing
' set con=nothing
Response.Redirect "pagina.htm"
Else
Response.Redirect("pagina.htm")
End If
%>

Este es el error k me marca

Microsoft VBScript runtime error '800a01a8'

Object required: 'con'

/prueba/mantencion/insert_bebes.asp, line 29
Esta es la linea 29

con.Close

yo deje como comentario esas lineas y me funciona, sino lo haces, se cae, aunk el registro lo guarda igual y la foto queda en la carpeta señalada..
Si logras arreglar eso podrias colocarlo asi nos sirve a todos..
Espero te sirva..
  #5 (permalink)  
Antiguo 10/09/2004, 15:37
 
Fecha de Ingreso: julio-2002
Ubicación: Valparaiso
Mensajes: 152
Antigüedad: 21 años, 10 meses
Puntos: 0
Al..
ese no componente es como ASP Upload??
Tienes k instalarlo para k funcione??
  #6 (permalink)  
Antiguo 10/09/2004, 15:45
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
No, no hay que instalar nada. Es puro código.

Saludos
__________________
...___...
  #7 (permalink)  
Antiguo 10/09/2004, 15:49
 
Fecha de Ingreso: julio-2002
Ubicación: Valparaiso
Mensajes: 152
Antigüedad: 21 años, 10 meses
Puntos: 0
Ahh... k bien
No te imaginas pk me arroja ese error en el script k coloque arriba

Microsoft VBScript runtime error '800a01a8'
Object required: 'con'
/prueba/mantencion/insert_bebes.asp, line 29

Linea 29

con.close
  #8 (permalink)  
Antiguo 10/09/2004, 15:54
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Porque no podés hacer un con.Close si nunca hiciste un con.Open (o sea, no podés cerrar algo que nunca fue abierto )
__________________
...___...
  #9 (permalink)  
Antiguo 10/09/2004, 16:14
 
Fecha de Ingreso: julio-2002
Ubicación: Valparaiso
Mensajes: 152
Antigüedad: 21 años, 10 meses
Puntos: 0
Ufff k torpe.... no me di cuenta..
Gracias por todo
  #10 (permalink)  
Antiguo 10/09/2004, 17:25
Avatar de armandoweb  
Fecha de Ingreso: enero-2003
Ubicación: San Cristobal, Santa Fe, Argentina
Mensajes: 544
Antigüedad: 21 años, 4 meses
Puntos: 7
Estimado Al Zuwaga: realicé todo como me indicaste, pero me da error interno del servidor. A continuación te muestro como adapte el código, a lo mejor estoy equivocando el camino....

<!--#include file="xelupload.asp"-->
<%
' Subida de imágenes
set objUpload = new xelUpload
objUpload.Upload()

'Solo se instancia el objeto si se ha subido al menos una imagen, de lo contrario da errores
If objUpload.Ficheros.Count > 0 then
'accedemos al fichero por su nombre en el formulario
Set objFich = objUpload.Ficheros("file")

'La guardo en el directorio images_noticias, con la fecha y hora de hoy, completa, como nombre:
'lo siguiente es el nombre original del archivo:
Nombre = Split(objFich.Nombre, ".")
'y aquí obtengo la extensión del archivo original:
Extension = Nombre(Ubound(Nombre))
'Compongo el nuevo nombre de archivo para evitar duplicados y le agrego la extensión:
strNombreFichero = Year(Now()) & Month(Now()) & Day(Now()) & Hour(Now()) & Minute(Now()) & Second(Now()) & "." & Extension
'finalmente, lo guardo
objFich.GuardarComo strNombreFichero, Server.MapPath("/noticias/images/")
End if

'ahora, almaceno en variables los datos a guardar en la BD
'IMPORTANTE: No se puede usar request.form. En su lugar, se usa el método Form de la clase objUpload
fecha = Replace(objUpload.Form("fecha"), "'", "''")
titulo = Replace(objUpload.Form("titulo"), "'", "''")
copete = Replace(objUpload.Form("copete"), "'", "''")
noticia = Replace(objUpload.Form("noticia"), "'", "''")

' hacés tu conexión a la BD...
dim cnn
set cnn = Server.CreateObject("ADODB.Connection")
cnn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("..\fpdb\cybernetsc.mdb"))

'luego, insertás todo:
SQL = "INSERT INTO Noticias (fecha, titulo, copete, notica, imagen) VALUES ('"& fecha &"', '" & titulo & "', '" & copete & "', '" & noticia & "', '" & strNombreFichero & "')"
cnn.Execute (SQL)

Response.Redirect "ok.asp"
%>

Desde ya un millon de gracias.
Saludos.

ARIEL CRIPPA
  #11 (permalink)  
Antiguo 10/09/2004, 17:39
 
Fecha de Ingreso: julio-2002
Ubicación: Valparaiso
Mensajes: 152
Antigüedad: 21 años, 10 meses
Puntos: 0
Debes habilitar el browser para que te muestre los errores
Opciones de Internet
Avanzadas
Examinar
Marcar --> Mostrar mensajes descriptivos de errores Http

Ahi te mostrara el error y la linea de este..
  #12 (permalink)  
Antiguo 11/09/2004, 14:13
Avatar de armandoweb  
Fecha de Ingreso: enero-2003
Ubicación: San Cristobal, Santa Fe, Argentina
Mensajes: 544
Antigüedad: 21 años, 4 meses
Puntos: 7
Mauro:
Me he fijado en esa opcion y la tengo marcada, pero el browser solo me muestra el error 500, solo eso. Le consulte a al zuwaga porque el me paso el código y seguramente sabe más que yo. Me da un error y no me doy cuenta donde puede estar. Si alguien puede ayudarme se lo agradecere eternamente.
Saludos.

ARIEL
  #13 (permalink)  
Antiguo 11/09/2004, 14:23
 
Fecha de Ingreso: julio-2002
Ubicación: Valparaiso
Mensajes: 152
Antigüedad: 21 años, 10 meses
Puntos: 0
Es k eso no te dice nada..
Supongo k probaste desmarcando y marcando esa opcion, el hecho es k te deberia aparecer el tipo de error y la linea donde ocurre..
Sino como saber donde esta la falla?
Se supone k el codigo de Al esta bueno, yo no lo probe ya k uso el componente AspUpload para subir archivos, si lo tienes en tu servidor podrias usar el codigo k te deje mas arriba...
La verdad es k sin la descripcion del error y la linea no sabria como hacerlo...
Yo empece a usar ASP hace como 2 meses solamente, asi k mucho tampoco se...
  #14 (permalink)  
Antiguo 12/09/2004, 22:12
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Cita:
Mauro: Me he fijado en esa opcion y la tengo marcada
Es que mauro se confundió. En realidad, para que te muestre el error, deberías desmarcar la opción que dice "mostrar mensajes descrtiptivos de los errores HTTP" en "erramientas -> opciones de internet -> opciones avanzadas" bajo la categoría de "examinar"

luego nos decís en qué línea da error y el tipo de error.
saludos
__________________
...___...
  #15 (permalink)  
Antiguo 12/09/2004, 23:48
 
Fecha de Ingreso: julio-2002
Ubicación: Valparaiso
Mensajes: 152
Antigüedad: 21 años, 10 meses
Puntos: 0
Cita:
Iniciado por M@uR0
Supongo k probaste "desmarcando y marcando" esa opcion, ..
La verdad es k no estaba seguro, por eso le preguntaba por ambas opciones
Pero despues de esto lo tengo claro
  #16 (permalink)  
Antiguo 13/09/2004, 13:25
Avatar de armandoweb  
Fecha de Ingreso: enero-2003
Ubicación: San Cristobal, Santa Fe, Argentina
Mensajes: 544
Antigüedad: 21 años, 4 meses
Puntos: 7
De nuevo...

Ahora si veo el mensaje de error y es el siguiente:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.
/ingreso/agrega_noticia.asp, line 37

Y la linea 37 es la siguiente

36) SQL = "INSERT INTO Noticias (fecha, titulo, copete, noticia, imagen) VALUES ('"& fecha &"', '" & titulo & "', '" & copete & "', '" & noticia & "', '" & strNombreFichero & "')"
37) cnn.Execute = SQL

Podran ayudarme??
Gracias.

ARIEL
  #17 (permalink)  
Antiguo 13/09/2004, 13:32
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Pues lo veo bien... decinos qué tipo de dato tienen los campos fecha, titulo, copete, noticia e imagen.

El único problemático podría ser fecha, que sería un date/time... tratá de reemplazar lo siguiente:

Código:
'"& fecha &"'
por (si es date/time):

Código:
#"& fecha &"#
ó por (si es numerico):

Código:
"& fecha &"

Igual y no me acuerdo bien como se colocaban los fecha/hora =)
__________________
...___...
  #18 (permalink)  
Antiguo 13/09/2004, 15:07
Avatar de armandoweb  
Fecha de Ingreso: enero-2003
Ubicación: San Cristobal, Santa Fe, Argentina
Mensajes: 544
Antigüedad: 21 años, 4 meses
Puntos: 7
Los valores de los datos son los siguientes:

SQL = "INSERT INTO Noticias (fecha, titulo, copete, noticia, imagen) VALUES ('"& fecha &"', '" & titulo & "', '" & copete & "', '" & noticia & "', '" & strNombreFichero & "')"

En la base de datos el campo es data/time.

Ariel.
  #19 (permalink)  
Antiguo 03/10/2004, 16:45
 
Fecha de Ingreso: enero-2004
Mensajes: 207
Antigüedad: 20 años, 4 meses
Puntos: 1
Hola Al Zuwaga,

mi problema es que no me sube la imagen, aunque si me guarda el nombre en
mi base de datos. El campo del form es "rutaimagen" y el directorio donde quiero guardarlo "imagenes" que esta justo debajo de propio fichero .asp que ejecuta este codigo (y le he dado privilegios de escritura, claro). Gracias(Añado que si en la ruta del directorio quito la primera "/" --> quedaría "imagenes/" entonces se me queda pillado sin abrirse la pagina y sin darme tampoco ningún error)

dim objUpload
set objUpload = new xelUpload
objUpload.Upload()

if objUpload.Ficheros.Count > 0 then

set objFich = objUpload.Ficheros("rutaimagen")

'Nombre y Extensión original del fichero subido
Nombre = Split(objFich.Nombre, ".")
Extension = Nombre(Ubound(Nombre))

'Asigno el nombre (nick del colaborador) + extensión:
strNombreFichero = Session("user") & "." & Extension

'Finalmente, lo guardo en el directorio imagenes
objFich.GuardarComo strNombreFichero, Server.MapPath("/imagenes/")

'Ahora guardo los datos en la BD
Set cn = Server.CreateObject("ADODB.Connection")
cn.Open Application("Conexion3")
strSQL = "UPDATE COLABORADOR SET avatar = '" & strNombreFichero & "' WHERE codigo = " & Session("user")
cn.Execute strSQL
cn.close

end if

Última edición por dblanco; 03/10/2004 a las 16:51
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 00:01.