Upload de archivos
Permitirle al cliente subirle archivos al servidor es algo muy comun y cada vez mas necesario para
que los sitios web sean mas dinámicos y configurables. Veremos una solucion rapida para realizar esta misión
Existen componentes para realizar la tarea (algunos muy buenos y recomendables) pero si no queremos hacer uso de ellos
porque no siempre nuestro hosting permite instalarlos (algunas veces hay que pagar adicinonales), podemos hacer un
upload por ASP PURO
Para el ejemplo, vamos a usar un script que lo pueden Descargar Aqui
El ZIP contiene 2 archivos.
| freeASPUpload.asp |
Corazon del upload. Clase implementada con sus metodos y propiedades
(no hace falta que entendamos o miremos este archivo, salvo que nos interese, por supuesto)
|
| PruebaUpload.asp |
Ejemplo de upload. (es el código que está aqui abajo) |
En realidad el código de aqui abajo esta simplificado para explicar ahora un poco como se maneja
el upload. El ejemplo que está en el ZIP para descargar está mas completo y mejor, pero para explicar
por primera vez, creo mas fácil un ejemplo con menos cosas...
Explicacion en detalle del script (el ejemplo)
La primera línea importante del script es la linea del Include:
<!-- #include file="freeaspupload.asp" -->
la cual llama al archivo freeASPUpload.asp (que
como dije antes, es el corazon de todo esto). Sin esta linea nada funcionará
Luego mas abajo hay un comentario que básicamente lo que dice es que hay que configurar el directorio de destino
donde los archivos subidos van a quedar. Esto se hace en una variable que está justo alli, en el ejemplo se llama
uploadsDirVar. (Leer el comentario. Habla sobre permisos de escritura, etc.)
Luego aparece una funcion llamada SaveFiles y es la que se encarga de efectuar la subida de los archivos.
Es la funcion que deberemos llamar para hacer el upload (internamente digamos, esta funcion hace uso del archivo
freeASPUpload.asp)
Explicacion dentro de la funcion. Hay dos lineas principales e imprescindibles:
Set Upload = New FreeASPUpload
Upload.Save(uploadsDirVar)
La primer linea crea un objeto de la clase FreeASPUpload y la segunda llama al método Save, produciendo el
upload de los archivos.
Luego restaría explicar un poco de HTML.
El formulario tiene que ser asi: <FORM METHOD="POST" enctype="multipart/form-data">
Y luego los campos de texto deben ser algo asi: <INPUT NAME="archivo1" TYPE="FILE">
Todo esto que estoy diciendo, está reflejado en el script de aqui abajo
<%
option explicit
Response.Expires = -1
Server.ScriptTimeout = 600
%>
<!-- #include file="freeaspupload.asp" -->
<%
' ****************************************************
' Cambiar el valor de la siguiente variable
' para indicar el directorio de destino.
' El directorio indicado debe tener permisos de escritura
' de caso contrario el script fallará mostrando un error.
Dim uploadsDirVar
uploadsDirVar = "C:\Inetpub\wwwroot\"
' ****************************************************
Function SaveFiles
Dim Upload, ks, resumen
Set Upload = New FreeASPUpload
Upload.Save(uploadsDirVar)
If Err.Number <> 0 then Exit function
ks = Upload.UploadedFiles.keys
if (UBound(ks) = -1) then resumen = "No es un nombre valido en el sistema."
SaveFiles = resumen
end function
%>
<HTML>
<HEAD><TITLE>Test Free ASP Upload</TITLE></HEAD>
<BODY>
<br>
<div style="border-bottom: #A91905 2px solid;font-size:16">Subir archivos</div>
<div style='margin-left:150'>
<form name="frmSend" method="POST" enctype="multipart/form-data" action="pruebaupload.asp">
Archivo 1: <input name="attach1" type="file" size="35"><br>
Archivo 2: <input name="attach2" type="file" size="35"><br>
<br>
<input type=submit value="Upload">
</form>
<BR></div>
<%
'solo llamo al UPLOAD si hay envio de formulario
if Request.ServerVariables("REQUEST_METHOD") = "POST" then
response.write SaveFiles()
end if
%>
</BODY>
</HTML>
|
Este ejemplo que manejamos aqui, es una "modificación" de su original, al cual le debemos las gracias.
El sitio oficial es este: Free ASP Upload. Aqui
hay una explicación (en ingles) del script y explica algunas cosas más.
Queda mucho por decir... no se vayan...
Por ejemplo que no podran hacer Request.Form("nombre") a un campo de texto que llamaron nombre dentro del mismo formulario...
Eso se debe a que el formulario va enviado de otro modo. El atributo ENCTYPE del FORM envia los datos en otro formato
digamos, impidiendo que el tipico Request() funcione
Pero a no preocuparse, podran hacer exactamente lo mismo con la llamada a Upload.Form("nombre")
Lamentablemente todo esto es bastante simple, pero carece de la posibilidad de guardar el archivo con un nombre
diferente al que tiene. Cual es el problema? que se podrian subir archivos con el mismo nombre, y pisarse uno a otro.
Un ejemplo facil seria una imagen que se llama "foto.jpg".
La solucion que yo planteo a este problema, es que nunca dejemos los archivos con el nombre que los suben, y siempre
renombrarlos a algo unico. Voy a poner un ejemplo.
Supongamos estamos desarrollando una pagina de autos. y se pueden subir fotos de autos...
Supuestamente esos "autos" son registros de una tabla de una base de datos, la cual siempre deberia tener un ID. entonces
la foto subida se puede renombrar al numero de ID del "auto"... es decir.
Como se renombra un archivo? ese es otro "problema" aparte que no tiene nada que ver con esto.
Para eso existe el Objeto integrado en ASP FileSystemObject el cual maneja archivos y cosas relacionadas.
De hecho pueden ver aqui un ejemplo sobre como renombrar un archivo
Cualquier discusión o pregunta sobre este ejemplo, la pueden dejar en el foro de mensajes
|