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

upload

Estas en el tema de upload en el foro de ASP Clásico en Foros del Web. Hola: Tengo problemas subiendo ficheros a mi servidor usando aspsmartupload en "upload.asp". A veces me sube bien el fichero pero otras veces no encuentra el ...
  #1 (permalink)  
Antiguo 17/12/2002, 16:37
 
Fecha de Ingreso: noviembre-2002
Mensajes: 54
Antigüedad: 22 años, 6 meses
Puntos: 0
upload

Hola:

Tengo problemas subiendo ficheros a mi servidor usando aspsmartupload en "upload.asp". A veces me sube bien el fichero pero otras veces no encuentra el script "upload.asp". Pense que era problema de codigo de ese script pero hice la siguiente prueba

Elimine todo el codigo del aspsmartupload en el script "upload.asp" y solo deje que se imprimiera un texto y en algunos momentos me daba el error o sea que persistia el problema. Cuando unico me mostraba el texto que deje en "upload.asp" era cuando le quitaba al formulario multipart/form-data. Da la impresion que depende de la velocidad de coneccion al algo similar.

Alguien puede explicarme esto
  #2 (permalink)  
Antiguo 17/12/2002, 16:42
 
Fecha de Ingreso: julio-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 255
Antigüedad: 22 años, 9 meses
Puntos: 0
Con respecto a upload...

Te paso un codigo, yo lo uso y funca muy bien, ahi va el codigo:

1. form.asp

<html>
<head>
<link rel=stylesheet type="text/css" href="../default.css">
<title>Formulario de envío de ficheros</title>
</head>
<body>
<h3>Formulario de Colaboraciones</h3>
<p>Introduce un texto y elige un fichero para subir.</p>
<form action="uptest.asp" method="GET" enctype="multipart/form-data">
Tu
Nombre <input type="text" name="nombre" size="20"> <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="file" name="fichero" size="20"><br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

<input type="submit" value="Enviar Colaboracion">
</form>

<p>&nbsp;</p>

</body>
</html>


2. uptest.asp

<% Response.Buffer = True %>

<!--#include file="xelupload.asp"-->
<%
Dim up, fich
set up = new xelUpload
up.Upload()

Response.Write("Muchas Gracias por tu colaboraciòn, Número de ficheros subidos: " & up.Ficheros.Count & "<br>")
Response.Flush
For each fich in up.Ficheros.Items
Response.Write("<ul>")
Response.Write("<li>Nombre: <b>" & fich.Nombre & "</b></li>")
Response.Write("<li>Tamaño: <b>" & fich.Tamano & "</b> bytes (" & FormatNumber(fich.Tamano / (1024*1024)) & " Mb)</li>")
Response.Write("<li>Tipo MIME: <b>" & fich.TipoContenido & "</b></li>")
Response.Write("</ul>")

'Para guardarlo
' Con el nombre de fichero original:
fich.Guardar Server.MapPath("/colaborar/archivos-subidos")
' Con otro nombre:
' fich.GuardarComo nombrefichero, Server.MapPath("rutavirtual")
'----------------------------------------------------------------
Next

'Limpiamos objeto
set up = nothing
%>

3. xelupload.asp

<%
'#################################################
'
' Fichero: xelupload.asp
' Descripción: contiene las clases
' "xelUpload" y "Fichero"
' escritas en VBScript
'
' Autor: Carlos de la Orden Dijs
' Email: [email protected]
' Fecha: Septiembre 2001
' Documentación: LEEME.TXT
'
' Ultima versión en
' http://www.aspfacil.com/
'
'-------------------------------------------------
' Ultima modificación 6/9/2001
'#################################################

Class xelUpload
' Maneja los formularios enviados como 'multipart/form-data' (ficheros)

Public Ficheros
Private eltosForm

'------------------------------------------------------------------------
Private Sub Class_Initialize()
set Ficheros = Server.CreateObject("Scripting.Dictionary")
set eltosForm = Server.CreateObject("Scripting.Dictionary")
End Sub
'------------------------------------------------------------------------
Private Sub Class_Terminate()
if IsObject(Ficheros) then
Ficheros.RemoveAll
set Ficheros = nothing
end if
if IsObject(eltosForm) then
eltosForm.RemoveAll
set eltosForm = nothing
end if
End Sub
'------------------------------------------------------------------------
'Permite hacer, por ejemplo: Response.Write(upload.Form("nombre"))
Public Property Get Form(campo)
if eltosForm.Exists(campo) then
Form = eltosForm.Item(campo)
else
Form = ""
end if
End Property
'------------------------------------------------------------------------
Public Sub Upload()
'Inicia el proceso. Debe llamarse ANTES DE HACER CUALQUIER OTRA COSA

Dim byteDatos, strControl
Dim iPosInicio, iPosFin, iPos, byteLimite, posLimite
Dim iPosFich, iPosLim

byteDatos = Request.BinaryRead(Request.TotalBytes)
iPosInicio = 1
iPosFin = InStrB(iPosInicio, byteDatos, str2byte(chr(13)))
if (iPosFin-iPosInicio) <= 0 then
'terminamos, no hay nada que leer
Exit Sub
end if
'extraemos el limite de principio y fin de los datos (p.e. -----2323g237623)
byteLimite = MidB(byteDatos, iPosInicio, iPosFin-iPosInicio)
posLimite = InStrB(1, byteDatos, byteLimite)

'terminamos cuando la posición del próximo límite sea igual
'a la del límite final, que lleva "--" detrás.
do until posLimite = InStrB(byteDatos, byteLimite & str2byte("--"))

iPos = InStrB(posLimite, byteDatos, str2byte("Content-Disposition"))
iPos = InStrB(iPos, byteDatos, str2byte("name=")) 'nombre del control en <FORM>
iPosInicio = iPos + 6 'me salto 6 caracteres -> name="
iPosFin = InStrB(iPosInicio, byteDatos, str2byte(chr(34))) 'busco las comillas de cierre
'y tengo el nombre del control!
strControl = byte2str(MidB(byteDatos, iPosInicio, iPosFin-iPosInicio))
'busco ahora los datos en sí del control
iPosFich =InStrB(posLimite, byteDatos, str2byte("filename="))
posLimite = InStrB(iPosFin, byteDatos, byteLimite)

'¿fichero o campo del formulario?
if iPosFich <> 0 and iPosFich < PosLimite then
'es un fichero, creo un nuevo objeto fichero y lo añado a Ficheros
Dim oFichero, strNombre, strForm
set oFichero = new Fichero

iPosInicio = iPosFich + 10 'me salto 10 caracteres -> filename="
iPosFin = InStrB(iPosInicio, byteDatos, str2byte(chr(34)))
strNombre = byte2str(MidB(byteDatos, iPosInicio, iPosFin-iPosInicio))
'quito la ruta inicial
oFichero.Nombre = Right(strNombre, Len(strNombre)-InStrRev(strNombre, "\")) '"

iPos = InStrB(iPosFin, byteDatos, str2byte("Content-Type:"))
iPosInicio = iPos + 14 'me salto Content-Type y un espacio!!
iPosFin = InStrB(iPosInicio, byteDatos, str2byte(chr(13))) 'busco el retorno de carro
oFichero.TipoContenido = byte2str(MidB(byteDatos, iPosInicio, iPosFin-iPosInicio))

iPosInicio = iPosFin + 4 'me salto los 3 retornos de carro que lleva!!!
iPosFin = InStrB(iPosInicio, byteDatos, byteLimite)-2 'dos caracteres atrás
oFichero.Datos = MidB(byteDatos, iPosInicio, iPosFin-iPosInicio)
if oFichero.Tamano > 0 then 'lo añado a la colección Ficheros!
Ficheros.Add strControl, oFichero
end if
else
'es un campo del formulario
iPos = InStrB(iPos, byteDatos, str2byte(chr(13)))
iPosInicio = iPos + 4
iPosFin = InStrB(iPosInicio, byteDatos, byteLimite)-2
'extraigo el valor del control del formulario!
strForm = byte2str(MidB(byteDatos, iPosInicio, iPosFin-iPosInicio))
if not eltosForm.Exists(strControl) then
eltosForm.Add strControl, strForm
else
eltosForm.Item(strControl) = eltosForm.Item(strControl)+","&strForm
end if
end if
'saltamos al siguiente límite
iPosLimite = InStrB(iPosLimite+LenB(byteLimite), byteDatos, byteLimite)
loop

End Sub
'------------------------------------------------------------------------
Private Function str2byte ( str )
Dim i, strbuf
for i = 1 to Len(str)
strbuf = strbuf & ChrB(AscB(Mid(str, i, 1)))
next
str2byte = strbuf
End Function
'------------------------------------------------------------------------
Private Function byte2str ( bin )
Dim i, bytebuf
for i = 1 to LenB(bin)
bytebuf = bytebuf & Chr(AscB(MidB(bin, i, 1)))
next
byte2str = bytebuf
End Function
'------------------------------------------------------------------------
End Class

'############################ Clase Fichero!!! ##########################

Class Fichero
'------------------------------------------------------------------------
Public Nombre
Public TipoContenido
Public Datos

'------------------------------------------------------------------------
Public Property Get Tamano()
Tamano = LenB(Datos)
End Property
'------------------------------------------------------------------------
Public Sub Guardar(ruta)
Dim oFSO, oFich
Dim i

if ruta = "" or Nombre = "" then Exit Sub
if Mid(ruta, Len(ruta)) <> "\" then '"
'añado la ultima barra a la ruta
ruta = ruta & "\" '"
end if

set oFSO = Server.CreateObject("Scripting.FileSystemObject")
if not oFSO.FolderExists(ruta) then Exit Sub
set oFich = oFSO.CreateTextFile(ruta & Nombre, true)

for i = 1 to LenB(Datos)
oFich.Write Chr(AscB(MidB(Datos, i, 1)))
next

oFich.Close
set oFSO = nothing
End Sub
'------------------------------------------------------------------------
Public Sub GuardarComo(nombrefichero, ruta)
Dim oFSO, oFich, i

if ruta = "" or nombrefichero = "" then Exit Sub
if Mid(ruta, Len(ruta)) <> "\" then '"
'añado la ultima barra a la ruta
ruta = ruta & "\" '"
end if

set oFSO = Server.CreateObject("Scripting.FileSystemObject")
if not oFSO.FolderExists(ruta) then Exit Sub
set oFich = oFSO.CreateTextFile(ruta & nombrefichero, true)

for i = 1 to LenB(Datos)
oFich.Write Chr(AscB(MidB(Datos, i, 1)))
next

oFich.Close
set oFSO = nothing


End Sub
'------------------------------------------------------------------------
Public Sub GuardarBD (byRef field)
if LenB(Datos) = 0 then Exit Sub

field.AppendChunk Datos
End Sub
End Class
'------------------------------------------------------------------------
%>


Espero que te sirba

Saludos
__________________
Pablo Maurelli
Noc IT - Monitoreo y Administración de Red
Gerencia de Infraestructura IT
E-Mail: [email protected] (MSN)
  #3 (permalink)  
Antiguo 17/12/2002, 19:57
Avatar de maestro  
Fecha de Ingreso: febrero-2002
Ubicación: España
Mensajes: 2.364
Antigüedad: 23 años, 3 meses
Puntos: 1
Ya te hemos contestado aqui:
http://forosdelweb.com/showthread.php?threadid=107100
__________________
Jose Maria Fernandez
[email protected]
Http://www.expansionweb.net
  #4 (permalink)  
Antiguo 18/12/2002, 15:33
 
Fecha de Ingreso: noviembre-2002
Mensajes: 54
Antigüedad: 22 años, 6 meses
Puntos: 0
No es un problema de el script. Te comento que solo utilizo el formulario con multipart/form-data que llama una pagina estatica, solo para probar y da el mismo problema, a veces carga la pagina estatica y otras no. Le quito multipart/form-data y siempre carga la pagina.

Gracias.
  #5 (permalink)  
Antiguo 18/12/2002, 15:45
Avatar de bakanzipp  
Fecha de Ingreso: noviembre-2001
Ubicación: santiago de shilli
Mensajes: 2.554
Antigüedad: 23 años, 5 meses
Puntos: 0
xelpuload

kizas encuentres mas detalle
  #6 (permalink)  
Antiguo 19/12/2002, 09:34
 
Fecha de Ingreso: julio-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 255
Antigüedad: 22 años, 9 meses
Puntos: 0
Pero ernestor copia y usa el codigo te envie ese funciona ok, no te rompas el balero a ver que puede ser, saludos
__________________
Pablo Maurelli
Noc IT - Monitoreo y Administración de Red
Gerencia de Infraestructura IT
E-Mail: [email protected] (MSN)
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:32.