Ver Mensaje Individual
  #3  
Antiguo 11-02-2013
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Reputación: 20
movorack Va camino a la famamovorack Va camino a la fama
Hola,

Leyendo un poco al respecto, me informo que los componentes indy no manejan SFTP.

en DelphiAccess encontré la siguiente respuesta donde usan CURL para transferir archivos vía SFTP.

Cita:
Empezado por Seoane
Código Delphi [-]
function ReadFromStream(Buffer: PAnsiChar; Size, Count: Integer;
  Stream: TStream): Integer; cdecl;
begin
  Result:= Stream.Read(Buffer^,Size*Count) div Size;
end;
 
function SaveToStream(Buffer: PAnsiChar; Size, Count: Integer;
  Stream: TStream): Integer; cdecl;
begin
  Result:= Stream.Write(Buffer^,Size*Count) div Size;
end;
 
function Subir(Usuario, Clave, URL, Archivo: AnsiString): Boolean;
var
  Curl: TCURL;
  Stream: TFileStream;
begin
  Result:= FALSE;
  Curl:= curl_easy_init;
  if Curl <> nil then
  try
    // Indicamos que muestre mensajes de todo lo que va haciendo
    if curl_easy_setopt(Curl, CURLOPT_VERBOSE, TRUE) <> CURLE_OK then
      Exit;
    // Le decimos que uses SSL
    if curl_easy_setopt(Curl, CURLOPT_USE_SSL, CURLUSESSL_ALL) <> CURLE_OK then
      Exit;
    // No verificamos la identidad del servidor, suponemos que es quien dice ser.
    if curl_easy_setopt(Curl, CURLOPT_SSL_VERIFYPEER, FALSE) <> CURLE_OK then
      Exit;
    // Indicamos el usuario
    if curl_easy_setopt(Curl, CURLOPT_USERNAME, PAnsiChar(Usuario)) <> CURLE_OK then
      Exit;
    // El password
    if curl_easy_setopt(Curl, CURLOPT_PASSWORD, PAnsiChar(Clave)) <> CURLE_OK then
      Exit;
    // La URL del tipo: sftp://servidor/rutadelfichero
    if curl_easy_setopt(Curl, CURLOPT_URL, PAnsiChar(URL)) <> CURLE_OK then
      Exit;
    // Le indicamos que funcion debe usar para leer el stream
    if curl_easy_setopt(Curl, CURLOPT_READFUNCTION, @ReadFromStream) <> CURLE_OK then
      Exit;
    // Creamos un stream a partir de un archivo
    Stream:= TFileStream.Create(Archivo,fmOpenRead);
    try
      // Aqui le indicamos el stream que debe subir
      if curl_easy_setopt(Curl, CURLOPT_INFILE, Stream) <> CURLE_OK then
        Exit;
      // Aqui le indicamos que la operacion es de subida
      if curl_easy_setopt(Curl, CURLOPT_UPLOAD, TRUE) <> CURLE_OK then
        Exit;
      // Ejecutamos el comando
      Result:= curl_easy_perform(Curl) = CURLE_OK;
    finally
      Stream.Free;
    end;
  finally
    curl_easy_cleanup(Curl);
  end;
end;
 
// Sube el archivo "C;\ART.DAT" al servidor con el nombre "2.txt"
  Subir('test','test','sftp://169.254.0.2:999/2.txt','C:\ART.DAT');
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita