Ir al contenido


Foto

Descargar archivo específico de un ftp y borrarlo usando curl


  • Por favor identifícate para responder
2 respuestas en este tema

#1 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.469 mensajes
  • LocationMéxico

Escrito 21 octubre 2011 - 04:29

Hola

Estoy desarrollando un programa para subir archivos a un ftp y esperar por la respuesta (en otro archivo), descargarlo y borrarlo.

Ya tengo 2/3 partes es decir, subir y bajar archivos, ¿Alguien sabe (seaone :D :D :D) cual es la función que se utiliza para indicarle que borre el archivo descargado ?

Saludos
  • 0

#2 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 21 octubre 2011 - 05:20

Un ejemplo rapidito que aquí son la 01:20 AM  |-)
El truco esta en ejecutar comandos en el servidor ftp. En el caso de un servidor sftp los comandos permitidos son (chgrp, chmod, chown, ln, mkdir, pwd, rename, rm, rmdir, symlink ) y en para el ftp normal los tienes aqui http://www.ietf.org/rfc/rfc959.txt
Vamos a suponer que el servidor es sftp, asi que vamos a usar el comando rm (borrar)
Partiendo de los ejemplos anteriores


delphi
  1. // Esto sirve para ignorar la respuesta del servidor
  2. function Ignorar(Buffer: PAnsiChar; Size, Count: Integer;
  3.   Stream: TStream): Integer; cdecl;
  4. begin
  5.   Result:= Count;
  6. end;
  7.  
  8. function Borrar(Usuario, Clave, Servidor, Archivo: AnsiString): Boolean;
  9. var
  10.   Curl: TCURL;
  11.   Comandos: pcurl_slist;
  12. begin
  13.   Result:= FALSE;
  14.   Curl:= curl_easy_init;
  15.   if Curl <> nil then
  16.   try
  17.     if curl_easy_setopt(Curl, CURLOPT_VERBOSE, TRUE) <> CURLE_OK then
  18.       Exit;
  19.     if curl_easy_setopt(Curl, CURLOPT_USE_SSL, CURLUSESSL_ALL) <> CURLE_OK then
  20.       Exit;
  21.     // No verificamos la identidad del servidor, suponemos que es quien dice ser
  22.     if curl_easy_setopt(Curl, CURLOPT_SSL_VERIFYPEER, FALSE) <> CURLE_OK then
  23.       Exit;
  24.     if curl_easy_setopt(Curl, CURLOPT_USERNAME, PAnsiChar(Usuario)) <> CURLE_OK then
  25.       Exit;
  26.     if curl_easy_setopt(Curl, CURLOPT_PASSWORD, PAnsiChar(Clave)) <> CURLE_OK then
  27.       Exit;
  28.     if curl_easy_setopt(Curl, CURLOPT_URL, PChar(Servidor)) <> CURLE_OK then
  29.       Exit;
  30.     if curl_easy_setopt(Curl, CURLOPT_WRITEFUNCTION, @Ignorar) <> CURLE_OK then
  31.       Exit;
  32.     if curl_easy_setopt(Curl, CURLOPT_FILE, nil) <> CURLE_OK then
  33.       Exit;
  34.     Comandos:= nil;
  35.     Comandos:= curl_slist_append(Comandos,PAnsiChar('rm ' + Archivo));
  36.     try
  37.       if curl_easy_setopt(Curl, CURLOPT_QUOTE, Comandos) <> CURLE_OK then
  38.         Exit;
  39.       Result:= curl_easy_perform(Curl) = CURLE_OK;
  40.     finally
  41.       curl_slist_free_all(Comandos);
  42.     end;
  43.   finally
  44.     curl_easy_cleanup(Curl);
  45.   end;
  46. end;
  47.  
  48.  
  49.   Borrar('usuario','password','sftp://127.0.0.1/','/test/test/test.txt');


Fíjate que la dirección del servidor termina en "/" y que la ruta del archivo es absoluta, es decir desde el directorio raíz.
Puedes ejecutar mas de un comando utilizando varias veces la función  curl_slist_append 
Creo que eso es todo mañana vemos si te funciono



  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.469 mensajes
  • LocationMéxico

Escrito 21 octubre 2011 - 05:22

Ya lo pruebo amigo, muchas gracias, mas tarde publico los resultados :)

Salud OS
  • 0




IP.Board spam blocked by CleanTalk.