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

Codigo ASP para subir archivos al Servidor, ¡GRATIS!

Estas en el tema de Codigo ASP para subir archivos al Servidor, ¡GRATIS! en el foro de ASP Clásico en Foros del Web. Saludos para quienes han batallado mucho con otras formas de subir archivos al servidor, aqui les muestro un codigo en asp listo para usar en ...

  #1 (permalink)  
Antiguo 14/03/2006, 17:20
Avatar de Boxmaster  
Fecha de Ingreso: agosto-2004
Ubicación: Ahorita... frente a mi PC
Mensajes: 74
Antigüedad: 19 años, 8 meses
Puntos: 0
De acuerdo Codigo ASP para subir archivos al Servidor, ¡GRATIS!

Saludos

para quienes han batallado mucho con otras formas de subir archivos al servidor, aqui les muestro un codigo en asp listo para usar en su sitio web.

Me costo un triunfo conseguir aqui y alla, probar y probar codigo, pero aqui tienen una aportacion de mi parte, espero sea util para la causa personal.


Nota: Solo tienen que crear una carpeta en la raiz de su directorio que se llame UPLOAD (ej. /upload)

UPLOAD.ASP

<%@LANGUAGE="VBSCRIPT"%>
<%response.buffer=true
Func = Request("Func")
if isempty(Func) Then
Func = 1
End if
Select Case Func
Case 1
%>

<table width="360" border="0" align="center">
<tr>
<td>
<div align="center">Selecciona una imagen para subir. </div>
</td>
</tr>
</table>
<FORM ENCTYPE="multipart/form-data" ACTION="upload.asp?func=2" METHOD=POST id=form1 name=form1>
<TABLE align="center">
<TR>
<TD>&nbsp;</TD>
</TR>
<TR>
<TD><font color="#330066" size="2">Pulsa en el botón examinar y elige el archivo
de tu ordenador.<BR>
<BR>
</font></TD>
</TR>
<TR>
<TD><font color="#330066" size="2">Luego pulsa el botón subir.<BR>
<BR>
</font></TD>
</TR>
<TR>
<TD><STRONG><font color="#330066" size="2">Nombre del archivo...</font></STRONG></TD>
</TR>
<TR>
<TD> <font size="2">
<INPUT NAME=File1 SIZE=30 TYPE=file>
<BR>
</font></TD>
</TR>
<TR>
<TD align=left>
<INPUT type="submit" value="Subir">
<BR>
<BR>
</TD>
</TR>
<TR>
<TD><font color="#330066" size="2">NOTA: Espera, recibirás una notificación
cuando el archivo haya sido subido</font><font size="2">.<BR>
<BR>
</font></TD>
</TR>
</TABLE>
<%
Case 2
ForWriting = 2
adLongVarChar = 201
lngNumberUploaded = 0

'Get binary data from form
noBytes = Request.TotalBytes
binData = Request.BinaryRead (noBytes)
'convery the binary data to a string
Set RST = CreateObject("ADODB.Recordset")
LenBinary = LenB(binData)

if LenBinary > 0 Then
RST.Fields.Append "myBinary", adLongVarChar, LenBinary
RST.Open
RST.AddNew
RST("myBinary").AppendChunk BinData
RST.Update
strDataWhole = RST("myBinary")
End if
'Creates a raw data file for with all da
' ta sent. Uncomment for debuging.
'Set fso = CreateObject("Scripting.FileSystemObject")
'Set f = fso.OpenTextFile(server.mappath(".") & "\raw.txt", ForWriting, True)
'f.Write strDataWhole
'set f = nothing
'set fso = nothing
'get the boundry indicator
strBoundry = Request.ServerVariables ("HTTP_CONTENT_TYPE")
lngBoundryPos = instr(1,strBoundry,"boundary=") + 8
strBoundry = "--" & right(strBoundry,len(strBoundry)-lngBoundryPos)
'Get first file boundry positions.
lngCurrentBegin = instr(1,strDataWhole,strBoundry)
lngCurrentEnd = instr(lngCurrentBegin + 1,strDataWhole,strBoundry) - 1
Do While lngCurrentEnd > 0
'Get the data between current boundry an
' d remove it from the whole.
strData = mid(strDataWhole,lngCurrentBegin, lngCurrentEnd - lngCurrentBegin)
strDataWhole = replace(strDataWhole,strData,"")

'Get the full path of the current file.
lngBeginFileName = instr(1,strdata,"filename=") + 10
lngEndFileName = instr(lngBeginFileName,strData,chr(34))
'Make sure they selected at least one fi
' le.
if lngBeginFileName = lngEndFileName and lngNumberUploaded = 0 Then

Response.Write "<H2> Ha ocurrido el siguiente error.</H2>"
Response.Write "Debes elegir un archivo para subir"
Response.Write "<BR><BR>Pulsa el botón volver, realiza la corrección."
Response.Write "<BR><BR><INPUT type='button' onclick='history.go(-1)' value='<< Volver' id='button'1 name='button'1>"
Response.End
End if
'There could be one or more empty file b
' oxes.
if lngBeginFileName <> lngEndFileName Then
strFilename = mid(strData,lngBeginFileName,lngEndFileName - lngBeginFileName)
'Creates a raw data file with data betwe
' en current boundrys. Uncomment for debug
' ing.
'Set fso = CreateObject("Scripting.FileSystemObject")
'Set f = fso.OpenTextFile(server.mappath(".") & "\raw_" & lngNumberUploaded & ".txt", ForWriting, True)
'f.Write strData
'set f = nothing
'set fso = nothing

'Loose the path information and keep jus
' t the file name.
tmpLng = instr(1,strFilename,"\")
Do While tmpLng > 0
PrevPos = tmpLng
tmpLng = instr(PrevPos + 1,strFilename,"\")
Loop

FileName = right(strFilename,len(strFileName) - PrevPos)

'Get the begining position of the file d
' ata sent.
'if the file type is registered with the
' browser then there will be a Content-Typ
' e
lngCT = instr(1,strData,"Content-Type:")

if lngCT > 0 Then
lngBeginPos = instr(lngCT,strData,chr(13) & chr(10)) + 4
Else
lngBeginPos = lngEndFileName
End if
'Get the ending position of the file dat
' a sent.
lngEndPos = len(strData)

'Calculate the file size.
lngDataLenth = lngEndPos - lngBeginPos
'Get the file data
strFileData = mid(strData,lngBeginPos,lngDataLenth)
'Create the file.
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(server.mappath("..") & "\upload" &_
FileName, ForWriting, True)
f.Write strFileData
Set f = nothing
Set fso = nothing

lngNumberUploaded = lngNumberUploaded + 1

End if

'Get then next boundry postitions if any
' .
lngCurrentBegin = instr(1,strDataWhole,strBoundry)
lngCurrentEnd = instr(lngCurrentBegin + 1,strDataWhole,strBoundry) - 1
loop


Response.Write "Archivo subido"
Response.Write lngNumberUploaded & " archivo ya está en el servidor.<BR>"
Response.Write "<BR><BR><INPUT type='button' onclick='document.location=" & chr(34) & "upload.asp" & chr(34) & "' value='<< Volver' id='button'1 name='button'1>"
End Select
%>
</BODY>
</HTML>


Sientanse libres de opinar y colaborar para mejorar este codigo y asi poder compartirlo con mas compañeros de foros del web.
  #2 (permalink)  
Antiguo 14/03/2006, 17:24
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
Cita:
Me costo un triunfo conseguir aqui y alla, probar y probar codigo, pero aqui tienen una aportacion de mi parte, espero sea util para la causa personal.
¿No es este código el mismo que posteas?
  #3 (permalink)  
Antiguo 14/03/2006, 17:43
Avatar de Boxmaster  
Fecha de Ingreso: agosto-2004
Ubicación: Ahorita... frente a mi PC
Mensajes: 74
Antigüedad: 19 años, 8 meses
Puntos: 0
Asi es Myakire, y me costo mucho encontrarlo, por eso lo comparto en este foro, para aquellos que batallan para subir archivos al servidor.


Espero sea de ayuda este codigo amigos.
  #4 (permalink)  
Antiguo 14/03/2006, 17:46
Avatar de ElAprendiz  
Fecha de Ingreso: enero-2002
Ubicación: Maipu, Chile
Mensajes: 3.706
Antigüedad: 22 años, 2 meses
Puntos: 2
sin componentes y/o clases?
Y Funciona

Última edición por ElAprendiz; 14/03/2006 a las 17:53
  #5 (permalink)  
Antiguo 14/03/2006, 17:47
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 3 meses
Puntos: 98
Gracias por compartir el link
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #6 (permalink)  
Antiguo 16/03/2006, 14:27
Avatar de VaIvan  
Fecha de Ingreso: octubre-2005
Ubicación: Mexico
Mensajes: 138
Antigüedad: 18 años, 6 meses
Puntos: 2
Gracias esta super bien, aclaro un detallito

Con el codigo tal como lo presentas, sube archivos al servidor pero no a la carpeta upload, para indicarle en donde lo ponga basta con colocar el nombre de la carpeta en la linea 156 mas o menos así:

Set f = fso.OpenTextFile(server.mappath("..") & "\upload\upload" &_
  #7 (permalink)  
Antiguo 19/03/2006, 17:47
Avatar de pempas  
Fecha de Ingreso: diciembre-2003
Ubicación: Barcelona
Mensajes: 985
Antigüedad: 20 años, 4 meses
Puntos: 6
Hola,

Gracias por compartir el código, tan solo hay un problema, cuando intento subir un PDF me da un error en la línea 65, más concretamente el código es:

binData = Request.BinaryRead (noBytes)

El error es:

Objeto Request error 'ASP 0104 : 80004005'

Operación no autorizada

/admin/upload.asp, línea 65

Tan solo me deja subir imágenes, ¿puede ser?

Salu2!
  #8 (permalink)  
Antiguo 19/03/2006, 17:49
Avatar de ElAprendiz  
Fecha de Ingreso: enero-2002
Ubicación: Maipu, Chile
Mensajes: 3.706
Antigüedad: 22 años, 2 meses
Puntos: 2
si es un servidor gratuito puede ser
  #9 (permalink)  
Antiguo 20/03/2006, 09:58
Avatar de pempas  
Fecha de Ingreso: diciembre-2003
Ubicación: Barcelona
Mensajes: 985
Antigüedad: 20 años, 4 meses
Puntos: 6
No es un servidor gratuito, es un servidor dedicado... no entiendo porque pasa esto, será por permisos??
  #10 (permalink)  
Antiguo 23/03/2006, 04:20
Avatar de pempas  
Fecha de Ingreso: diciembre-2003
Ubicación: Barcelona
Mensajes: 985
Antigüedad: 20 años, 4 meses
Puntos: 6
Para todos aquellos a los que les pase como a mi, que sepan que si tienen un servidor dedicado y el límite del buffer se colapsa, la respuesta está aquí:

http://www.fogcreek.com/FogBugz/KB/e...mitExceed.html

Saludos y gracias a todos
  #11 (permalink)  
Antiguo 18/07/2006, 13:42
 
Fecha de Ingreso: septiembre-2005
Mensajes: 7
Antigüedad: 18 años, 6 meses
Puntos: 0
Subir archivos a otra maquina

Buenos Tardes.

Tengo un problema, y es en subir archivos a otra máquina o a un servidor remoto. Mi aplicaciçon sube archivos al servidor local allocalhost y todo, pero cuando le cambio la ruta sea a un servidor remoto me sale:

Failed uploading queryFM sql:
System UnauthorizedAccessException: Access to the path \\servidorremoto\carpteta\archivo.txt

Tengo asignado los permisos necesarios para acceder a la ruta descrita anteriormente.

Alguien puede ayudarme, please....
  #12 (permalink)  
Antiguo 20/09/2006, 10:39
 
Fecha de Ingreso: septiembre-2006
Mensajes: 2
Antigüedad: 17 años, 7 meses
Puntos: 0
no me funciona

gente, buenas.
Me es de muy utilidad este codigo, pero no lo puedo hacer funcionar.

Me tirra error de que no encuentra el servidor.

Alguno sabe por que?

gracias
  #13 (permalink)  
Antiguo 20/09/2006, 12:41
 
Fecha de Ingreso: septiembre-2006
Mensajes: 2
Antigüedad: 17 años, 7 meses
Puntos: 0
Buenas capo. Parece que funciona pero me tira acceso denegado.

Alguno tiene idea por que?


Saludos
  #14 (permalink)  
Antiguo 21/09/2006, 10:19
Avatar de pcarvajal  
Fecha de Ingreso: enero-2002
Mensajes: 701
Antigüedad: 22 años, 3 meses
Puntos: 8
consulta.. asumo que ese codigo no sirve para servidores gratuitos como brinkster o domaindlx porque no soportan FSO. Es posible "amoldarlo" de alguna manera para que pueda ser utilizado en servidores gratuitos?

Última edición por pcarvajal; 21/09/2006 a las 10:27 Razón: abri los ojos y leí de nuevo el mensaje..
  #15 (permalink)  
Antiguo 25/09/2006, 15:32
k3n
 
Fecha de Ingreso: marzo-2006
Mensajes: 56
Antigüedad: 18 años, 1 mes
Puntos: 0
¿Y cómo sería sin hacer submit?

Holas. Yo necesito subir un archivo al servidor pero no al momento de hacer un submit. Necesito hacerlo en otro momento, pero sí obtengo la ruta del archivo a subir en una cadena. ¿Es posible con este código aún subirlo al servidor?
  #16 (permalink)  
Antiguo 25/09/2006, 17:38
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
solo por curiosidad ......... si no es el submit ¿cuándo lo deseas hacer?
  #17 (permalink)  
Antiguo 25/09/2006, 17:58
k3n
 
Fecha de Ingreso: marzo-2006
Mensajes: 56
Antigüedad: 18 años, 1 mes
Puntos: 0
Lo que sucede que no es el único dato que debo "submitear". La restricción es el tipo del form, que ya tiene una gran cantidad de datos y que no corresponden al tipo "enctype="multipart/form-data"". Además, ando usando el submit para cargar combos dinámicos en esa página, y es recién ahora que debo adjuntar al servidor un archivo. Puedo obtener la cadena de la ruta del archivo en la PC, y esperaba poder usarla como string para hacer la carga del archivo, pero como dije, el form me restringe a que sea sólo de tipo "file" la data enviada. Por eso necesito alguna manera de usar esa cadena para hacer la carga del archivo.
  #18 (permalink)  
Antiguo 25/09/2006, 18:40
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
¿qué?

¿Dónde leiste que un formulario multipart/form-data no puede llevar otro tipo de datos?

Puedes mandar todos tus controles "normales" junto con tus controles tipo file dentro del mismo formulario

Ya el como los leas depende del método de upload que estes siguiendo, por ejemplo, si usas el freeasp lo haces con un Upload.Form("nombreDelControl")

Saludos
  #19 (permalink)  
Antiguo 25/09/2006, 18:55
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 3 meses
Puntos: 98
Bueno, bueno, pero no se enoje....
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #20 (permalink)  
Antiguo 26/09/2006, 08:03
k3n
 
Fecha de Ingreso: marzo-2006
Mensajes: 56
Antigüedad: 18 años, 1 mes
Puntos: 0
Gracias MyAkire, pero aún no logro que me funcione correctamente. Lo que sucede es que ya tengo toda mi página hecha, y esto de cargar un archivo al servidor es reciente. He intentado usar el upload.form("nombre"), pero parece que no es exactamente igual que hacer un request("nombre"), porque toda la lógica de mi página me tira error. Me dice que las variables "Type mismatch", y cuando imprimo las variables con un clásico Response.Write, me salen nulas. ¿Cómo trabajo con las variables ahora que uso el upload.form?
  #21 (permalink)  
Antiguo 26/09/2006, 13:18
k3n
 
Fecha de Ingreso: marzo-2006
Mensajes: 56
Antigüedad: 18 años, 1 mes
Puntos: 0
Lo encontré en este foro

Hey; esto es exactamente lo que me pasa a mí :D. Parece que no hay solución :(. A menos que mande un correo a zacktagnan :D.

http://www.forosdelweb.com/f15/freeaspupload-upload-form-379965/
  #22 (permalink)  
Antiguo 26/09/2006, 14:00
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
Sería útil ver el código que tienes (indicando también la linea que tira error), por que eso debe de funcionar sin problemas, quizá hay un problema de colocación o nombres de objetos
  #23 (permalink)  
Antiguo 26/09/2006, 17:02
Avatar de sjam7  
Fecha de Ingreso: diciembre-2001
Ubicación: Guadalajara, Mexico
Mensajes: 3.672
Antigüedad: 22 años, 4 meses
Puntos: 16
Cita:
Iniciado por Boxmaster Ver Mensaje
Asi es Myakire, y me costo mucho encontrarlo, por eso lo comparto en este foro, para aquellos que batallan para subir archivos al servidor.


Espero sea de ayuda este codigo amigos.
Cita:
Me costo un triunfo conseguir aqui y alla, probar y probar codigo, pero aqui tienen una aportacion de mi parte, espero sea util para la causa personal.
Probaste algo ya probado? es una aportacion de tu parte? quien te entiende... bueno

yo he probado el xeupload, que tiene de diferencia este?
  #24 (permalink)  
Antiguo 27/09/2006, 08:43
k3n
 
Fecha de Ingreso: marzo-2006
Mensajes: 56
Antigüedad: 18 años, 1 mes
Puntos: 0
Pues primero, lo que he hecho es colocar el código aquel de la función SaveFiles:

' ************************************************** **
' 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, fileName, fileSize, ks, i, fileKey, resumen
Set Upload = New FreeASPUpload
Upload.Save(uploadsDirVar)
' If something fails inside the script, but the exception is handled
If Err.Number <> 0 then Exit function
SaveFiles = ""
ks = Upload.UploadedFiles.keys
if (UBound(ks) <> -1) then
resumen = "<B>Archivos subidos:</B> "
for each fileKey in Upload.UploadedFiles.keys
resumen = resumen & Upload.UploadedFiles(fileKey).FileName & " (" & Upload.UploadedFiles(fileKey).Length & "B) "
next
else
resumen = "El nombre del archivo especificado en el formulario no es valido en el sistema."
end if
'comentar la siguiente linea si no se desea mostrar el resumen
' SaveFiles = resumen
end function

if Request.ServerVariables("REQUEST_METHOD") = "POST" then
'Hace el upload de los archivos enviados y muestra el resumen
response.write SaveFiles()
end if

Pongo el "if" final para que apenas se haga el submit, suba los archivos al servidor. Pero ni bien entra a la página, tengo algunas variables que ya vienen de la página anterior, y cuando trato de usar el upload.form("nombre"), y al momento de usar la variable, me dice que "Type Mismatch".

Set Upload = New FreeASPUpload --> seteo del Upload, porque sino me dice que "Object Required"

doc = Upload.Form("doc")

...

if doc = 0 then --> aquí es la línea del error "Type Mismatch".


Además, para poder usar ese "Upload.Form", tengo que setear el Upload: Set Upload = New FreeASPUpload. Yo asumo que estoy usando mal los métodos del Upload. Además, las variables que vienen del form anterior, que no es multipart, también tienen que ser usadas en el que sí es multipart.
  #25 (permalink)  
Antiguo 27/09/2006, 14:00
Avatar de Boxmaster  
Fecha de Ingreso: agosto-2004
Ubicación: Ahorita... frente a mi PC
Mensajes: 74
Antigüedad: 19 años, 8 meses
Puntos: 0
El codigo que puse en el primer mensaje, me funciono a la perfeccion en mi server, no tengo mi sitio alojado en un server gratuito, asi que no se si funciona en uno gratuito.

POr lo tanto lo comparti porque se que muchos compañeros programadores lo necesitan, este codigo se puede modificar, en el caso de los PDF a mi no me dio problemas, pero en fin, lo que les he mostrado lo hice con el fin de ayudar, asi que no puedo hacer mas por el momento. si encuentro otras opciones se las hare saber inmediatamente.

En cuanto a otros programas gratuitos, no los he usado asi que me disculpan, voy a hacer unas pruebas con el ASPUploader a ver como me va. Por lo pronto hasta luego muchachos y chicas, portense bien.

Bye
__________________
México no es México sin su gente, y la democracia no es de algunas personas, es de todos. Hagamos valer nuestros derechos.
  #26 (permalink)  
Antiguo 07/02/2007, 11:58
 
Fecha de Ingreso: enero-2007
Mensajes: 23
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: Codigo ASP para subir archivos al Servidor, ¡GRATIS!

no me funciona tu codigo en mi servidor de prueba wwwroot, mando los archivos pero no aparecen en la carpeta upload, que puedo hacer??????????????????
  #27 (permalink)  
Antiguo 08/02/2007, 07:50
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
Re: Codigo ASP para subir archivos al Servidor, ¡GRATIS!

¿marca error?
  #28 (permalink)  
Antiguo 28/01/2008, 16:53
Avatar de DanX03  
Fecha de Ingreso: septiembre-2007
Ubicación: México D.F.
Mensajes: 148
Antigüedad: 16 años, 6 meses
Puntos: 3
Re: Codigo ASP para subir archivos al Servidor, ¡GRATIS!

a mi tampoco me funciona el codigo, no me marca error y he mandado la impresion del valor que contienen mis variables y no lo hace
  #29 (permalink)  
Antiguo 29/01/2008, 14:29
Avatar de Julcar  
Fecha de Ingreso: noviembre-2007
Ubicación: C:\inetpub\wwwroot\Guayaquil
Mensajes: 1.507
Antigüedad: 16 años, 4 meses
Puntos: 54
Re: Codigo ASP para subir archivos al Servidor, ¡GRATIS!

Si este código no funciona, vean en esta web este sistema de upload

http://www.diproweb.somee.com/insert.htm

y me dicen qué opinan en el foro.
  #30 (permalink)  
Antiguo 31/01/2008, 15:49
Avatar de DanX03  
Fecha de Ingreso: septiembre-2007
Ubicación: México D.F.
Mensajes: 148
Antigüedad: 16 años, 6 meses
Puntos: 3
Re: Codigo ASP para subir archivos al Servidor, ¡GRATIS!

Bueno ya probe el codigo de BoxMaster completo, me marca permiso denegado.
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.
Tema Cerrado

SíEste tema le ha gustado a 3 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 05:31.