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

Ayuda urgente con ruta de directorio UPLOAD

Estas en el tema de Ayuda urgente con ruta de directorio UPLOAD en el foro de ASP Clásico en Foros del Web. Hola!! Mi web funciona perfectamente en Local, la subida de archivos, el envio de correo, etc... todo perfecto!!!. En local uso el archivo conexion.asp q ...
  #1 (permalink)  
Antiguo 10/09/2004, 02:55
Avatar de Joselete  
Fecha de Ingreso: septiembre-2001
Ubicación: Granada, España
Mensajes: 263
Antigüedad: 22 años, 9 meses
Puntos: 0
Ayuda urgente con ruta de directorio UPLOAD

Hola!!

Mi web funciona perfectamente en Local, la subida de archivos, el envio de correo, etc... todo perfecto!!!.

En local uso el archivo conexion.asp q es:

<!--#include file="cadenaconexion.asp"-->
<%


rutafichero = "ficheros\"
rutaraiz = "C:\Inetpub\wwwroot\FINAL\"
rutafoto= "C:\Inetpub\wwwroot\FINAL\"
rutafotosAlta="C:\Inetpub\wwwroot\FINAL\web\Fotos\ "

%>
<script language="JavaScript">
function nuevaventana1 (pagina,a,b)
{
open(pagina,"nueva1","toolbar=no,directories=no,sc rollbars=yes,menubar=no,resizable=yes,width=" + a + ",height=" +b);
}

</script>


Bien, el formulario de subida de fotos formfichero.asp, q es:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<html>
<head>
<title>Subida de ficheros</title>
<style>
#precarga{
position:absolute;
width:100%;
height:100%;
top:0;
left:0;
bgcolor: #E4e7ee;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
background-color: #E4e7ee;
visibility: hidden;
}
</style>
<link rel="stylesheet" href="../style.css" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript">
<!--
function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_showHideLayers() { //v6.0
var i,p,v,obj,args=MM_showHideLayers.arguments;
for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
obj.visibility=v; }
}
//-->
</script>
</head>

<body bgcolor="#E4e7ee">
<form name="formulario" action="grabafichero.asp" method="post" enctype="multipart/form-data">
<div id="precarga">
<center><h3><br>Cargando, espere por favor...</h3></center></div>
<table width="96%" border="0" cellspacing="0" cellpadding="0" bgcolor="#E4e7ee" class="normal">
<tr>
<td width="44%">Seleccione el fichero a subir:</td>
<td width="56%"><input name="fichero" type="file" class="normal"></td>
</tr>
<tr>
<td>&nbsp;</td>
<input type="hidden" name="idvehiculo" value="<%=request.QueryString("id")%>">
<td><input type="submit" name="submit" value="Subir Foto" onClick="MM_showHideLayers('precarga','','show')" class="normal"></td>
</tr>
</table>

</form>
</body>
</html>


el archivo grabafichero.asp al q hace referencia es:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<html>
<head>
<!--#include file="xelupload.asp"-->
<!--#include file="conexion.asp"-->
<title>Subida de ficheros</title>
<link rel="stylesheet" href="../style.css" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#E4e7ee">
<div align="center" class="normal">
<p class="normal">
<%
set rsFotosFichero = server.CreateObject("adodb.recordset")
rsFotosFichero.CursorType = 1
rsFotosFichero.CursorLocation= 3
rsFotosFichero.LockType =3
'para subir el fichero
Dim objUpload, objFich, strNombreFichero
Dim strNombre, strEdad

'Creamos el objeto
set objUpload = new xelUpload

'Recibimos el formulario
objUpload.Upload()

'Mostramos total de ficheros recibidos


'Y ahora mostramos los datos del fichero enviado:
'Lo sacamos a una variable por comodidad
set objFich = objUpload.Ficheros("fichero")



'Guardamos el fichero, con su nombre, en el directorio
'en el que se encuentra esta página
'response.Write(Server.MapPath("/upload"))
objFich.Guardar(Server.MapPath("/upload"))
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FileExists(rutafotosAlta & objFich.nombre)) Then
Response.write "Ya existe una foto con ese nombre. Renombrela para subirla al sevidor <br>"
subido = false
Else
fso.movefile Server.MapPath("/upload") & "\" & objFich.nombre,rutafotosAlta
subido = true
End If


set fso = nothing


'Y guardamos una copia, con nombre "subido.bin"

'objFich.GuardarComo("pa.bin", Server.MapPath("."))
if subido then
rsFotosFichero.open "fotos",conexion
rsFotosFichero.addnew
rsFotosFichero("id") =objUpload.Form("idvehiculo")
rsFotosFichero("nombre_foto") = objFich.nombre

rsFotosFichero.update
end if
set rsFotosFichero = nothing

set objFich = nothing


set objUpload = nothing
%>
<%if subido then%>
<strong>El fichero se ha grabado correctamente </strong></p>
<%else %>
<strong>El fichero NO se ha subido correctamente porque ya existe en el servidor </strong>
<%end if%>
<p class="normal"><strong>pulse <a href="javascript:cerrar();">aqui</a> para cerrar esta ventana</strong> </p>
</div>
<script language="JScript">

function cerrar()
{
window.opener.history.go(0)
self.opener.location.href = self.opener.location;
window.close();
}

</script>
</body>
</html>
__________________
"El Universo simpre quiere que ganemos"
  #2 (permalink)  
Antiguo 10/09/2004, 02:56
Avatar de Joselete  
Fecha de Ingreso: septiembre-2001
Ubicación: Granada, España
Mensajes: 263
Antigüedad: 22 años, 9 meses
Puntos: 0
bien, como veis la subida de ficheros utilizamos XelUpload,de aspfácil.com y q es:

<%
'#################################################
'
' 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, "\")) '"
session("datos")=oFichero.Nombre
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
'------------------------------------------------------------------------
%>


Pues bien, al colocar la web en el servidor, todo funciona correctamente, pero a la hora de subir fotos, el servidor me devolvia un error de permisos, ya q la carpeta /upload era de solo lectura, asi pues le di permisos y ahora el error q me devuelve es:


Error de Microsoft VBScript en tiempo de ejecución error '800a004c'

Ruta de acceso no encontrada

/web/privada/grabafichero.asp, línea 47


y os comento la linea 47:

fso.movefile Server.MapPath("/upload") & "\" & objFich.nombre,rutafotosAlta


Así pués, el error está en mi conexion.asp, q no se indicarle la ruta exacta del directorio.

Arriba os puse la ruta en LOCAL, para ver si alguien puede explicarme como se puede pasar una ruta de local a especificar la ruta en el servidor (la url será del tipo http://www.web.com/upload)

Si alguien me entiende, por favor me gustaria q me explicara en q se diferencia una ruta de otra, algo q me haga entenderlo y asimilarlo para futuras ocasiones.

Sin más, os agradezco el interés mostrado.

Salu2!!
__________________
"El Universo simpre quiere que ganemos"
  #3 (permalink)  
Antiguo 10/09/2004, 04:48
Avatar de Joselete  
Fecha de Ingreso: septiembre-2001
Ubicación: Granada, España
Mensajes: 263
Antigüedad: 22 años, 9 meses
Puntos: 0
__________________
"El Universo simpre quiere que ganemos"
  #4 (permalink)  
Antiguo 10/09/2004, 08:37
Avatar de Joselete  
Fecha de Ingreso: septiembre-2001
Ubicación: Granada, España
Mensajes: 263
Antigüedad: 22 años, 9 meses
Puntos: 0
arrghhhhhhhh!!!!!
__________________
"El Universo simpre quiere que ganemos"
  #5 (permalink)  
Antiguo 10/09/2004, 10:02
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Hacé una cosa, inmediatamente arriba de la línea 47, colocá lo siguiente:

Response.Write Server.MapPath("/upload") & "\" & objFich.nombre
Response.Write "<br>"
Response.Write rutafotosAlta
Response.End()

...y fijate si las rutas son correctas (cosa que no creo, porque tenés "/upload" y "\" en el mismo path)
__________________
...___...
  #6 (permalink)  
Antiguo 10/09/2004, 10:36
Avatar de Joselete  
Fecha de Ingreso: septiembre-2001
Ubicación: Granada, España
Mensajes: 263
Antigüedad: 22 años, 9 meses
Puntos: 0
Gracias Al,

por lo visto la ruta está mal, me devuelve error de PATH NOT FOUND en la línea 48, q es:
Response.Write Server.MapPath("/upload") & "\" & objFich.nombre


Ofúuuuuuuuu, se supone q /upload estácolgando del raiz, no??, es decir www.web.com/upload...

menudo follon

Ayuda!! ;)
__________________
"El Universo simpre quiere que ganemos"
  #7 (permalink)  
Antiguo 10/09/2004, 10:56
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
bueno, creo que el problema no está en /upload, porque si vos ponés Response.Write Server.MapPath("/una_carpeta_que_no_existe") el resultado será c:\inetpub\wwwroot\una_carpeta_que_no_existe sin dar error de PATH NOT FOUND

Ah, pero.... ¿pusiste el response.end() que te dije?

Andá haciendo responsES.writeS (y response.end()) de tus rutas y nombres de archivos y andá verificando que sea todo correcto.. a mi siempre me joden la vida las rutas, nunca le acierto a la primera vez, así que tengo que ir debuggeando línea a línea hasta detectar el problema
__________________
...___...
  #8 (permalink)  
Antiguo 01/10/2004, 06:17
Avatar de Joselete  
Fecha de Ingreso: septiembre-2001
Ubicación: Granada, España
Mensajes: 263
Antigüedad: 22 años, 9 meses
Puntos: 0
Todo solucionado, muchas gracias!!!

Una ultima cosa, como se pude limitar el tamaño de los archivos a 100Kb por ejemplo??

Uso XelUpload!!

Gracias!
__________________
"El Universo simpre quiere que ganemos"
  #9 (permalink)  
Antiguo 01/10/2004, 10:00
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Fijate en la ayuda o el readme del mismo exelupload que eso viene detallado (o en el sitio, no lo recuerdo pero por algún lado está)
__________________
...___...
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 23:13.