alan_upload.asp:
Código:
upload.asp:<% set fso=createobject("scripting.filesystemobject") class alan_upload function obtener_tamano(archivo) set t=fso.getfile(archivo) obtener_tamano=formatnumber(t.size/(1024*1024)) end function function guardar(r,inf) 'Función que guarda los archivos dim origen,todo,n,nombre,tipo,tamano,informe 'Declaración de variables if "/"=right(r,1) then ruta=r else ruta=r&"/" end if 'Si la ruta no tiene una diagonal al final, se la ponemos. origen=request.binaryread(request.totalbytes) 'Datos binarios 'Convertimos los datos binarios a una cadena set rs=createobject("adodb.recordset") rs.fields.append "datos",201,lenb(origen) rs.open rs.addnew rs("datos").appendchunk origen rs.update separador=replace(request.servervariables("HTTP_CONTENT_TYPE"),"multipart/form-data; boundary=","") 'Éste separador separa los archivos. todo_pr=split(rs("datos"),separador) 'Creamos un array con todos los archivos. archivos=ubound(todo_pr)-1 'Contamos todos los archivos for o=1 to archivos todo=split(todo_pr(o),vbcrlf) 'Array separado por saltos de línea del archivo actual n=split(todo(1),"\") 'Nombre de archvo previo nombre=left(n(ubound(n)),len(n(ubound(n)))-1) 'Nombre de archivo tipo=replace(todo(2),"Content-Type: ","") 'Tipo de contenido set crear=fso.createtextfile(ruta&nombre,true) for i=4 to ubound(todo)-1 if i=ubound(todo)-1 then crear.write todo(i) else crear.write todo(i)&vbcrlf end if next crear.close() 'Cerramos el archivo. informe=informe&"Nombre: <b>"&nombre&"</b><br>Tamaño: <b>"&obtener_tamano(ruta&nombre)&" MB</b><br>Tipo de contenido: <b>"&tipo&"</b><hr>" 'Informe de todos los archivos. tamano=tamano+csng(obtener_tamano(ruta&nombre)) 'Obtenemos el tamaño total de los archivos. next if inf=true then guardar="<b>Se han subido correctamente los archivos:</b><br><br>"&informe&"<br>Total de archivos subidos: <b>"&archivos&"</b><br>Tamaño total de los archivos: <b>"&tamano&" MB</b>" else guardar="" end if 'Checamos si el usuario eligio mostrar o no el informe end function end class %>
Código:
Hay que crear una carpeta llamada "upload".<!--#include file="alan_upload.asp"--> <%server.scripttimeout=99999999 'Definimos el tiempo máximo de carga de la página. on error resume next%> <html><title>Subir archivos</title><body> <script>function crear(n){document.f.onsubmit='return true';var inicio=document.getElementById('inicio');inicio.innerHTML='';var t='';for(i=1;i<n;i++){t=t+'Archivo '+i+': <input type=file name=archivo'+i+'><br>'} t=t+'Archivo '+n+': <input type=file name=archivo'+n+'><br><input type=submit value="Subir archivos"><br>Nota: no deje ningún campo vacío, sino ocurrirán errores';inicio.innerHTML=t}</script> <% if not request.servervariables("request_method")="POST" then 'Si no hay formulario, lo mostramos. %> <form name=f action="" method=post enctype="multipart/form-data" onsubmit="return false"> <span id=inicio> ¿Cuántos archivos quiere subir?: <input type=text name=c> <input type=button onclick=crear(this.form.c.value) value="Crear formulario"> </span> </form> <% else 'Si hay formulario set up=new alan_upload 'Creamos la clase. response.write up.guardar(server.mappath("upload"),true) 'Se pone la ruta donde desea guardar el archivo. Después si se pone true, aparacerá un informe del archivo. Si se pone false, no aparecera nada. if err.description<>"" then 'Si ocurre un error, lo describimos response.write "Hubo un error al subir los archivos:<br>"&err.description end if end if %> </body></html>
Se puede subir más de un archivo por formulario.