| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
MarioMarieti Cmdr

Registrado: 28 Dic 2004Mensajes: 144Ubicación: Murcia (España)
|
Publicado: Vie 24 Sep, 2021 12:43 pm Asunto: Descargar y subir archivos a un pc servidor con FTP |
|
|
Hola buenas tardes.
Estoy intentando utilizar el objeto IdFTP para descargar y subir archivos a un pc que se utiliza como servidor de archivos. Para ello estoy utilizando la rutina que he encontrado en el foro:
ftp->Host = "X.X.0.X";
ftp->Password="contraseña";
ftp->Username="nombreusuario";
ftp->Port=21;
//ftp->Passive=true;
ftp->Connect();
AnsiString sArchivoFTP="rutaarchivo\escudo1.bmp"; //ejemplo
AnsiString destino="c:\\Temp\\escudocopia.bmp"; // archivo destino
FStream = new TFileStream(destino,Classes::fmCreate);
if(ftp->Connected()){
try{
ftp->TransferType=ftBinary;
ftp->Get(sArchivoFTP,FStream,false); // descargar archivo
// borrar archivo
//ftp->Delete(Valor); // desactivado por pruebas
}
catch(...){
ShowMessage("archivo no encontrado");
}
}
ftp->Quit();
Y cuando llega a la linea se establece la conexión ( ftp->Connect() )
me da el siguiente error:
Debugger Exception Notification
Project Geseve.exe raised exception class EIdSocketError with message 'Socket Error # 10060
Connection timed out.'
Si alguien me puede ayudar, o indicarme si tendría que utilizar IdTrivialFTP, se lo agradecería.
Gracias. |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Jue 07 Oct, 2021 6:45 pm Asunto: |
|
|
Hola, a mi de esta manera me funciona sin problemas:
| Código: | IdFTP1->Host = "ftp.miDominio.com";
IdFTP1->Username = "miUsuario";
IdFTP1->Password = "miClave";
IdFTP1->Passive = true;
IdFTP1->Connect();
String origen = "miDir\\escudocopia.bmp";
String destino = "c:\\Temp\\escudocopia.bmp";
if (IdFTP1->Connected())
{
try
{
IdFTP1->Get(origen, destino, true);
}
catch (...)
{
ShowMessage("archivo no encontrado");
}
IdFTP1->Disconnect();
} |
En caso de que no vayas a usar el Stream para nada no es necesario crearlo, ya poniendo el nombre de origen y destino lo crea el mismo internamente.
Si esto lo vas a usar para distribuir lo más sencillo es conectar en modo "Pasivo" ya que así no hay que estar abriendo puertos en el router o cortafuegos ni otras complicaciones.
No es necesario usar "Quit" (esta marcado como obsoleto en la documentación), Disconnect ya manda un Quit internamente.
Un fallo que veo en tu código, pero que presupongo que solo ha sido al escribirlo aquí, a menos que hayas usado copiar y pegar, es que en la variable origen estas usando una barra invertida sola.. |
|
| Volver arriba |
|
 |
MarioMarieti Cmdr

Registrado: 28 Dic 2004Mensajes: 144Ubicación: Murcia (España)
|
Publicado: Jue 14 Oct, 2021 6:31 am Asunto: |
|
|
Hola Leo y gracias por responder.
También he probado con el ejemplo que me pasado pero no consigo que funcione.
IdFTP1->Host = "ftp.miDominio.com" --> Yo aquí pongo una dirección IP. puede ser que no funcione por eso?. Todo lo demás lo hago igual.
Gracias. |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Jue 14 Oct, 2021 2:29 pm Asunto: |
|
|
Hola, no, realmente da igual usar la IP directamente. Por si acaso sea un tema de tu servidor FTP, he buscado un servidor público para tener exactamente la misma prueba:
(El código tal como está sin modificar nada descarga un PNG de un servidor público para pruebas)
| Código: | IdFTP1->Host = "195.144.107.198";
IdFTP1->Username = "demo";
IdFTP1->Password = "password";
IdFTP1->Passive = true;
IdFTP1->Connect();
String origen = "/pub/example/pocketftp.png";
String destino = "c:\\Temp\\escudocopia.png";
if (IdFTP1->Connected())
{
try
{
IdFTP1->Get(origen, destino, true);
}
catch (...)
{
ShowMessage("archivo no encontrado");
}
IdFTP1->Disconnect();
} |
Si te sigue dando problemas haz alguna prueba en otra versión si tienes, o puedes instalarte alguna demo o la versión Community en VirtualBox por ejemplo, para descartar algún problema con tu instalación. O si me das más detalles de lo que ocurre al probar este ejemplo tal como esta y el TIdFTP con los valores de sus propiedades por defecto.. intento hacer más pruebas.
Información del servidor de FTP usado para la prueba: https://test.rebex.net/ |
|
| Volver arriba |
|
 |
MarioMarieti Cmdr

Registrado: 28 Dic 2004Mensajes: 144Ubicación: Murcia (España)
|
Publicado: Lun 25 Oct, 2021 6:44 am Asunto: |
|
|
Hola Leo.
He probado el ejemplo que publicaste y funciona perfectamente.
Posiblemente sea cosa de nuestro servidor FTP. Aún así probaré también a hacerlo como me propones con un virtual a ver si funciona.
Muchas gracias. Ya comunicaré como resultó. |
|
| Volver arriba |
|
 |
|