ASP Fcil
El sitio para programadores ASP  

Búsqueda rápida
Ayuda
Secciones
Portada
Diario
Artículos
Código
Trucos
Foros ASP
Recursos
Favoritos
Referencia
Tutorial SQL
SQL-O-Matic
Otras
Boletín ASPFácil
Colabora
Sobre este sitio
Anunciarse aquí
Cont@ctar
Formación


Versión para imprimir / Salvar en Favoritos

Subir ficheros al servidor mediante xelUpload (II)

Este es el código de nuestra página que recibe el formulario:

<%
'pagina.asp
%>
<!--#include file="xelupload.asp"-->
<%
Dim oConn, rs, SQL
Dim objUpload, objFich, strNombre, strEdad
Dim maxtam, strNombreFichero

'nuestro tamaño máximo
maxtam = 15 * 1024

set objUpload = new xelUpload
objUpload.Upload()

'recuperamos los campos usuario y edad
strNombre = objUpload.Form("usuario")
strEdad = objUpload.Form("edad")

'si no ha subido ningún fichero, le avisamos
if objUpload.Ficheros.Count = 0 then
	Response.Write("¡No has subido ningún fichero!")
else
	'accedemos al fichero por su nombre en el formulario
	set objFich = objUpload.Ficheros("imagen")
	if objFich.Tamano <= maxtam and objFich.TipoContenido = "image/gif" then
		'Es el fichero correcto, vamos a guardarlo en todas partes. :-)
		
		'Primero, en nuestro directorio actual con el nombre que tiene
		objFich.Guardar Server.MapPath(".")

		'Ahora, en el directorio upload, con la fecha de hoy como nombre
		strNombreFichero = Day(Date) & Month(Date) & Year(Date)
		objFich.GuardarComo strNombreFichero, Server.MapPath("upload")

		'Ahora nos conectamos a una base de datos
		set oConn = Server.CreateObject("ADODB.Connection")
		set rs = Server.CreateObject("ADODB.Recordset")
	
		'Nos conectamos con ODBC sin DSN, suponiendo que la base
		'de datos está en este mismo directorio
		oConn.Open "Driver={Microsoft Access Driver (*.mdb)};" _
			& "DBQ=" & Server.MapPath("usuarios.mdb")
		SQL = "SELECT * FROM usuarios"
		'Abrimos el Recordset: el 0 es el cursor adForwardOnly
		' y el 2 es el cerrojo adLockPessimistic
		rs.Open SQL, oConn, 0, 2

		'Añadimos un nuevo registro
		rs.AddNew
		rs.Fields("Nombre") = strNombre
		rs.Fields("Edad") = strEdad
		rs.Fields("NombreFichero") = objFich.Nombre

		'Llamamos a GuardarBD pasandole el campo correspondiente!!!
		objFich.GuardarBD rs.Fields("Imagen")

		'Guardamos el nuevo registro
		rs.Update

		'y limpiamos todo que vienen los padres
		rs.Close
		set rs = nothing
		oConn.Close
		set oConn = nothing

		'¡Todo correcto!
		Response.Write "Se ha añadido el nuevo usuario <b>" & strNombre & "</b>, "  _
		& "con el fichero " & objFich.Nombre & " de tamaño " & objFich.Tamano & "."

		'Limpiamos nuestro xelUpload y el fichero
		set oFich = nothing
		set objUpload = nothing

	else
		'No era un fichero válido
		Response.Write("No es un fichero aceptable. ")
		Response.Write("Tiene que ser un fichero GIF de menos de 15k.")
	end if

end if
%>

En este código véis todas las posibilidades que ofrece xelUpload. La tabla usuarios que utilizamos tiene esta estructura:

Nombre del campo Tipo de datos
ID_Usuario Autonumérico
Nombre Texto
Edad Texto
NombreFichero Texto
Imagen Objeto OLE

Como véis, Objeto OLE es el tipo que acepta datos binarios en Access. En SQL Server el equivalente es image, que es de tipo binario y acepta más de 8.000 bytes, o binary si guardamos menos de 8.000 bytes.

Observaciones, notas, etc

Hay una restricción importante del objeto Request, que hace imprescindible incluir el manejo de los campos normales de un formulario dentro del programa que maneje los ficheros subidos: que después de utilizar Request.BinaryRead no se puede utilizar Request.Form y viceversa. Así que tenéis que utilizar la propiedad Form de vuestro objeto xelUpload para leer los campos habituales de un formulario.

Si queréis ver el código, echadle un ojo al fichero xelupload.asp, está bastante comentado. En el ZIP incluyo otra página de prueba, form.html y una documentación decente en leeme.txt.

No me queda más que decir, que os bajéis -por fin- el fichero ZIP ahora mismo, lo probéis, y me digáis que os parece.

Un saludo,
Carlos de la Orden Dijs

Página anterior


Enlaces

  • Descargar xelupload.zip
  • La parte de la especificación HTML 4 dedicada a este tipo de formularios
  • Un RFC que también trata sobre el tema


  • >> ¿Quieres saber cuándo se publicarán nuevos artículos? ¡Suscríbete al Boletín de ASPFácil! << 
    >> Comparte tus dudas y comentarios sobre este artículo en el foro Artículos de ASPFácil << 
    (Arriba)

    © ASP Fácil 2000-2004 excepto en casos indicados
    El mejor alojamiento web en acens