Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/11/2009, 12:08
bebo
 
Fecha de Ingreso: octubre-2009
Mensajes: 97
Antigüedad: 15 años, 6 meses
Puntos: 4
Subir archivos al servidor sin componentes

Si quieren subir archivos al servidor de forma gratuita y sin componentes, utilizen éste código:

alan_upload.asp:
Código:
<%
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
%>
upload.asp:
Código:
<!--#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>
Hay que crear una carpeta llamada "upload".
Se puede subir más de un archivo por formulario.

Última edición por bebo; 16/11/2009 a las 23:06 Razón: Mejoró el código