Jump to content
Fivewin Brasil

AJUDA COM FTP


Theotokos

Recommended Posts

Fiz uma rotina simples para fazer o download de um arquivo, porem se este arquivo estiver na raiz abaixa certinho... mas se esta dentro de uma pasta ai da problema...

baixa o arquivo, porem o conteúdo dele fica assim: 550 SYSRLI.RLI: N; ao invés do conteúdo certo... 

estou fazendo assim:

   oUrl              := tUrl():New( cUrl )
   oFTP              := tIPClientFtp():New( oUrl, .f. )
   oFTP:nConnTimeout := 20000
   oFTP:bUsePasv     := .T.
 

   IF At( "@", cUser ) > 0
      oFTP:oUrl:cServer   := cServer
      oFTP:oUrl:cUserID   := cUser
      oFTP:oUrl:cPassword := cPassword
   ENDIF
    lOpen := .f.
    *
   MsgRun( "Abrindo FTP", "FTP", {|| lOpen := oFTP:Open( cUrl ) })

   IF lOpen
         cPastaServ := "Clientes/"+AllTrim(cCliFTP)

          file  := 'SYSRLI.RLI'  // Arquivo a ser Baixado

          oFtp:cwd( cPastaServ )   // Pasta onde esta o Arquivo
          oFTP:cReply()
          
          lRetorno := oFtp:DownloadFile( cFile )

 


 

Link to comment
Share on other sites

Tente assim. Troque os dados da emagsoftware pelos seus.

#include "Fivewin.ch"
	FUNCTION Main()
	    LOCAL cUrl := "ftp://myuser@aruba.it:mypassword@ftp.emagsoftware.it"
	    LOCAL oUrl := TUrl():New( cUrl )
	    LOCAL oFtp := TIpClientFtp():New( oUrl, .T. )
	    oFtp:Open( cUrl )
	    ? oFtp:CWD( "/emagsoftware.it" )
	    ? oFtp:DownloadFile( "email.gif" )
	    oFtp:Close()
	RETURN NIL

Regards, saludos.

Link to comment
Share on other sites

39 minutos atrás, Jmsilva disse:

Aparentemente  o erro é cusado por falta do segundo parâmetro oFtp:DownloadFile( cFile ), como o arquivo está em uma pasta diferente ao criar localmente gera o problema.

Tente assim: lRetorno := oFtp:DownloadFile( "nomefile.zip",cfile)

//downloadFile( <cLocalFile>, [<cRemoteFile>] ) --> lSuccess

vê se resolve!

lRetorno := oFtp:DownloadFile( "teste.txt", cFile )

fiz assim, mas continua mesma coisa, só mudou o nome do arquivo, que no FTP é SYSRLI.RLI baixou teste.txt

Link to comment
Share on other sites

1 hora atrás, kapiaba disse:

Tente assim. Troque os dados da emagsoftware pelos seus.

 


#include "Fivewin.ch"
	FUNCTION Main()
	    LOCAL cUrl := "ftp://myuser@aruba.it:mypassword@ftp.emagsoftware.it"
	    LOCAL oUrl := TUrl():New( cUrl )
	    LOCAL oFtp := TIpClientFtp():New( oUrl, .T. )
	    oFtp:Open( cUrl )
	    ? oFtp:CWD( "/emagsoftware.it" )
	    ? oFtp:DownloadFile( "email.gif" )
	    oFtp:Close()
	RETURN NIL

 

Regards, saludos.

tmb nao deu! 

Link to comment
Share on other sites

        *oFtp:cwd( cPastaServ )   ESTE COMANDO NAO FUNCIONA
         *oFTP:cReply()
    

COLOQUEI ASSIM, DIRETO oFtp:DownloadFile(  "pasta\arquivo_a_gravar", "pasta/arquivo_a_ser_baixado" )

      
        MsgRun( "AGUARDE A LIBERAÇÃO SYSRli" + CRLF + cPastaServ + CRLF + cFile, ;
                  "Download", {|| lRetorno := oFtp:DownloadFile( "ArqSYS\"+cFile, cPastaServ+cFile )} )

 

ASSIM FUNCIONOU :D

Link to comment
Share on other sites

Essa Rotina aqui,  consegui tmb, e mais rapido

//
// File attributes
//

#define FILE_ATTRIBUTE_READONLY  1
#define FILE_ATTRIBUTE_HIDDEN    2
#define FILE_ATTRIBUTE_SYSTEM    4
#define FILE_ATTRIBUTE_DIRECTORY 16
#define FILE_ATTRIBUTE_ARCHIVE   32
#define FILE_ATTRIBUTE_NORMAL    128
#define FILE_ATTRIBUTE_TEMPORARY 256


//
// access types for InternetOpen()
//

#define INTERNET_OPEN_TYPE_PRECONFIG                    0   // use registry configuration
#define INTERNET_OPEN_TYPE_DIRECT                       1   // direct to net
#define INTERNET_OPEN_TYPE_PROXY                        3   // via named proxy
#define INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY  4   // prevent using java/script/INS


//
// manifests
//

#define INTERNET_INVALID_PORT_NUMBER    0           // use the protocol-specific default

#define INTERNET_DEFAULT_FTP_PORT       21          // default for FTP servers
#define INTERNET_DEFAULT_GOPHER_PORT    70          //    "     " gopher "
#define INTERNET_DEFAULT_HTTP_PORT      80          //    "     " HTTP   "
#define INTERNET_DEFAULT_HTTPS_PORT     443         //    "     " HTTPS  "
#define INTERNET_DEFAULT_SOCKS_PORT     1080        // default for SOCKS firewall servers.


//
// service types for InternetConnect()
//

#define INTERNET_SERVICE_FTP     1
#define INTERNET_SERVICE_GOPHER  2
#define INTERNET_SERVICE_HTTP    3
#define INTERNET_FLAG_PASSIVE 134217728


//
// flags for FTP
//

#define INTERNET_FLAG_TRANSFER_ASCII  1
#define INTERNET_FLAG_TRANSFER_BINARY 2

//-------------------------------------------------------------------


FUNCTION MandaFTP(host, usuario, senha, pastaServ, arquivo, pastaLocal, oquefazer )

    LOCAL hInternet, hConnect
    Local afiles

    hInternet = INTERNETOPEN( "Anystring", INTERNET_OPEN_TYPE_DIRECT, 0, 0, 0 )

    hConnect = INTERNETCONNECT( hInternet, host, INTERNET_INVALID_PORT_NUMBER, usuario, senha, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0 )

    if oquefazer = "pega"

        if ! FTPGETFILE( hConnect, pastaServ+arquivo, pastaLocal+arquivo, 0, FILE_ATTRIBUTE_ARCHIVE, 0, 0 )
                msgStop("Erro ao receber arquivo "+pastaServ+arquivo,"Atenção!")
        end

    else

        if  FTPPUTFILE( hConnect, pastaLocal+arquivo, pastaServ+arquivo, 0, 0 )
                msginfo("Arquivo enviado.","Sucesso!")
        else
                msgalert("Falha no envio do arquivo"+CRLF+;
                    "Verifique conexão com a internet e firewall.","Problemas.")
        end
    end


    INTERNETCLOSEHANDLE( hConnect )

    INTERNETCLOSEHANDLE( hInternet )


RETURN NIL

//==============================================================================================

/*
FUNCTION MandaImg(host, usuario, senha, pasta, aJPG, dir, oquefazer, QuemChamou)

    LOCAL hInternet, hConnect
  local hFTPDir, aFiles := {}
   local oWin32FindData, cBuffer
   Local aonde, arquivo

   STRUCT oWin32FindData
      MEMBER nFileAttributes  AS DWORD
      MEMBER nCreationTime    AS STRING LEN 8
      MEMBER nLastReadAccess  AS STRING LEN 8
      MEMBER nLastWriteAccess AS STRING LEN 8
      MEMBER nSizeHight       AS DWORD
      MEMBER nSizeLow         AS DWORD
      MEMBER nReserved0       AS DWORD
      MEMBER nReserved1       AS DWORD
      MEMBER cFileName        AS STRING LEN 260
      MEMBER cAltName         AS STRING LEN  14
   ENDSTRUCT

    hInternet = INTERNETOPEN( "Anystring", INTERNET_OPEN_TYPE_DIRECT, 0, 0, 0 )

    hConnect = INTERNETCONNECT( hInternet, host, INTERNET_INVALID_PORT_NUMBER, usuario, senha, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0 )

    if oquefazer = "vesetem"


          cBuffer = oWin32FindData:cBuffer
          hFTPDir = FtpFindFirstFile( hConnect, "*.*", @cBuffer, 0, 0 )
          oWin32FindData:cBuffer = cBuffer
          if ! Empty( oWin32FindData:cFileName )
             aadd( aFiles, { oWin32FindData:cFileName,;
                         oWin32FindData:nSizeLow } )
             while InternetFindNextFile( hFTPDir, @cBuffer )
                oWin32FindData:cBuffer = cBuffer
                aadd( aFiles, { oWin32FindData:cFileName,;
                            oWin32FindData:nSizeLow } )
             end
          endif
        if len(afiles)>0
            for i=1 to len(aJPG)
                 aonde := ascan(afiles,aJpg)
                if aonde > 0

                    adel(aJPG,aonde)  //fica na matriz somente o que vai ser enviado

                end

            next
        else
            msgAlert("Erro ao carregar Dir Remoto."+CRLF+"Conexão falhou."+CRLF+"Gere o relatório novamente.","Atenção:")
        end
    else

        aJPg := {}
    end

    if len(aJPG)>0

        for i=1 to len(aJPG)
            arquivo := aJPG
            if  FTPPUTFILE( hConnect, dir+arquivo, pasta+arquivo, 0, 0 )
                if QuemChamou = "WT5f0A"
                    msginfo("Arquivo enviado.","Sucesso!")
                end

                // crio log da transacao
                SumLog(arquivo, "Enviado por ","FTP ")
            else
                msgalert("Falha no envio do arquivo"+CRLF+;
                        "dir+arquivo: "+dir+arquivo + CRLF+;
                        "pasta+arquivo: "+pasta+arquivo+CRLF+;
                    "Verifique conexão com a internet e firewall.","Problemas.")
                    SumLog(arquivo, "Falhou ao enviar ","FTP ")
            end
        next
    end
    INTERNETCLOSEHANDLE( hConnect )

    INTERNETCLOSEHANDLE( hInternet )


RETURN NIL
*/
//================================================================================================

#pragma BEGINDUMP

#include "windows.h"
#include "wininet.h"
#include "hbapi.h"


HB_FUNC( INTERNETOPEN )
{
    hb_retnl( ( LONG ) InternetOpen( hb_parc( 1 ), hb_parnl( 2 ), hb_parc( 3 ), hb_parc( 4 ), hb_parnl( 5 ) ) );
}


HB_FUNC( INTERNETCLOSEHANDLE )
{
    hb_retl( InternetCloseHandle( ( HINTERNET ) hb_parnl( 1 ) ) );
}


HB_FUNC( INTERNETCONNECT )
{
    hb_retnl( ( LONG ) InternetConnect( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), ( INTERNET_PORT ) hb_parnl( 3 ), hb_parc( 4 ), hb_parc( 5 ), hb_parnl( 6 ), hb_parnl( 7 ), hb_parnl( 8 ) ) );
}


HB_FUNC( FTPGETFILE )
{
    hb_retl( FtpGetFile( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), hb_parc( 3 ), hb_parl( 4 ), hb_parnl( 5 ), hb_parnl( 6 ), hb_parnl( 7 ) ) );
}


HB_FUNC( FTPPUTFILE )
{
    hb_retl( FtpPutFile( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), hb_parc( 3 ), hb_parnl( 4 ), hb_parnl( 5 ) ) );
}


HB_FUNC( FTPDELETEFILE )
{
    hb_retl( FtpDeleteFile( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ) ) );
}


HB_FUNC( FTPCREATEDIRECTORY )
{
    hb_retl( FtpCreateDirectory( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ) ) );
}


HB_FUNC( FTPREMOVEDIRECTORY )
{
    hb_retl( FtpRemoveDirectory( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ) ) );
}


HB_FUNC( FTPFINDFIRSTFILE )
{
    hb_retnl( ( LONG ) FtpFindFirstFile( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), ( WIN32_FIND_DATA * ) hb_parc( 3 ), hb_parnl( 4 ), hb_parnl( 5 ) ) );
}


HB_FUNC( INTERNETFINDNEXTFILE )
{
    hb_retl( InternetFindNextFile( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ) ) );
}

#pragma ENDDUMP

 

 

 

 

 

 

SÓ A FUNÇÃO MANDAIMG() QUE NAO FUNCIONOU, MAS NO MOMENTO NÃO VOU USAR... DÁ ERRO NA ROTINA A BAIXO

   STRUCT oWin32FindData
      MEMBER nFileAttributes  AS DWORD
      MEMBER nCreationTime    AS STRING LEN 8
      MEMBER nLastReadAccess  AS STRING LEN 8
      MEMBER nLastWriteAccess AS STRING LEN 8
      MEMBER nSizeHight       AS DWORD
      MEMBER nSizeLow         AS DWORD
      MEMBER nReserved0       AS DWORD
      MEMBER nReserved1       AS DWORD
      MEMBER cFileName        AS STRING LEN 260
      MEMBER cAltName         AS STRING LEN  14
   ENDSTRUCT

 

Link to comment
Share on other sites

2 minutos atrás, kapiaba disse:

 

//
// File attributes
//

#define FILE_ATTRIBUTE_READONLY  1
#define FILE_ATTRIBUTE_HIDDEN    2
#define FILE_ATTRIBUTE_SYSTEM    4
#define FILE_ATTRIBUTE_DIRECTORY 16
#define FILE_ATTRIBUTE_ARCHIVE   32
#define FILE_ATTRIBUTE_NORMAL    128
#define FILE_ATTRIBUTE_TEMPORARY 256


//
// access types for InternetOpen()
//

#define INTERNET_OPEN_TYPE_PRECONFIG                    0   // use registry configuration
#define INTERNET_OPEN_TYPE_DIRECT                       1   // direct to net
#define INTERNET_OPEN_TYPE_PROXY                        3   // via named proxy
#define INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY  4   // prevent using java/script/INS


//
// manifests
//

#define INTERNET_INVALID_PORT_NUMBER    0           // use the protocol-specific default

#define INTERNET_DEFAULT_FTP_PORT       21          // default for FTP servers
#define INTERNET_DEFAULT_GOPHER_PORT    70          //    "     " gopher "
#define INTERNET_DEFAULT_HTTP_PORT      80          //    "     " HTTP   "
#define INTERNET_DEFAULT_HTTPS_PORT     443         //    "     " HTTPS  "
#define INTERNET_DEFAULT_SOCKS_PORT     1080        // default for SOCKS firewall servers.


//
// service types for InternetConnect()
//

#define INTERNET_SERVICE_FTP     1
#define INTERNET_SERVICE_GOPHER  2
#define INTERNET_SERVICE_HTTP    3
#define INTERNET_FLAG_PASSIVE 134217728


//
// flags for FTP
//

#define INTERNET_FLAG_TRANSFER_ASCII  1
#define INTERNET_FLAG_TRANSFER_BINARY 2

//-------------------------------------------------------------------


FUNCTION MandaFTP(host, usuario, senha, pastaServ, arquivo, pastaLocal, oquefazer )

    LOCAL hInternet, hConnect
    Local afiles

    hInternet = INTERNETOPEN( "Anystring", INTERNET_OPEN_TYPE_DIRECT, 0, 0, 0 )

    hConnect = INTERNETCONNECT( hInternet, host, INTERNET_INVALID_PORT_NUMBER, usuario, senha, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0 )

    if oquefazer = "pega"

        if ! FTPGETFILE( hConnect, pastaServ+arquivo, pastaLocal+arquivo, 0, FILE_ATTRIBUTE_ARCHIVE, 0, 0 )
                msgStop("Erro ao receber arquivo "+pastaServ+arquivo,"Atenção!")
        end

    else

        if  FTPPUTFILE( hConnect, pastaLocal+arquivo, pastaServ+arquivo, 0, 0 )
                msginfo("Arquivo enviado.","Sucesso!")
        else
                msgalert("Falha no envio do arquivo"+CRLF+;
                    "Verifique conexão com a internet e firewall.","Problemas.")
        end
    end


    INTERNETCLOSEHANDLE( hConnect )

    INTERNETCLOSEHANDLE( hInternet )


RETURN NIL

//==============================================================================================

*
FUNCTION MandaImg(host, usuario, senha, pasta, aJPG, dir, oquefazer, QuemChamou)

    LOCAL hInternet, hConnect
  local hFTPDir, aFiles := {}
   local oWin32FindData, cBuffer
   Local aonde, arquivo

    /*
   STRUCT oWin32FindData
      MEMBER nFileAttributes  AS DWORD
      MEMBER nCreationTime    AS STRING LEN 8
      MEMBER nLastReadAccess  AS STRING LEN 8
      MEMBER nLastWriteAccess AS STRING LEN 8
      MEMBER nSizeHight       AS DWORD
      MEMBER nSizeLow         AS DWORD
      MEMBER nReserved0       AS DWORD
      MEMBER nReserved1       AS DWORD
      MEMBER cFileName        AS STRING LEN 260
      MEMBER cAltName         AS STRING LEN  14
   ENDSTRUCT
    */
    
    hInternet = INTERNETOPEN( "Anystring", INTERNET_OPEN_TYPE_DIRECT, 0, 0, 0 )

    hConnect = INTERNETCONNECT( hInternet, host, INTERNET_INVALID_PORT_NUMBER, usuario, senha, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0 )

    if oquefazer = "vesetem"


          cBuffer = oWin32FindData:cBuffer
          hFTPDir = FtpFindFirstFile( hConnect, "*.*", @cBuffer, 0, 0 )
          oWin32FindData:cBuffer = cBuffer
          if ! Empty( oWin32FindData:cFileName )
             aadd( aFiles, { oWin32FindData:cFileName,;
                         oWin32FindData:nSizeLow } )
             while InternetFindNextFile( hFTPDir, @cBuffer )
                oWin32FindData:cBuffer = cBuffer
                aadd( aFiles, { oWin32FindData:cFileName,;
                            oWin32FindData:nSizeLow } )
             end
          endif
        if len(afiles)>0
            for i=1 to len(aJPG)
                 aonde := ascan(afiles,aJpg)
                if aonde > 0

                    adel(aJPG,aonde)  //fica na matriz somente o que vai ser enviado

                end

            next
        else
            msgAlert("Erro ao carregar Dir Remoto."+CRLF+"Conexão falhou."+CRLF+"Gere o relatório novamente.","Atenção:")
        end
    else

        aJPg := {}
    end

    if len(aJPG)>0

        for i=1 to len(aJPG)
            arquivo := aJPG
            if  FTPPUTFILE( hConnect, dir+arquivo, pasta+arquivo, 0, 0 )
                if QuemChamou = "WT5f0A"
                    msginfo("Arquivo enviado.","Sucesso!")
                end

                // crio log da transacao
            else
                msgalert("Falha no envio do arquivo"+CRLF+;
                        "dir+arquivo: "+dir+arquivo + CRLF+;
                        "pasta+arquivo: "+pasta+arquivo+CRLF+;
                    "Verifique conexão com a internet e firewall.","Problemas.")
            end
        next
    end
    INTERNETCLOSEHANDLE( hConnect )

    INTERNETCLOSEHANDLE( hInternet )


RETURN NIL
*
//================================================================================================

#pragma BEGINDUMP

#include "windows.h"
#include "wininet.h"
#include "hbapi.h"


HB_FUNC( INTERNETOPEN )
{
    hb_retnl( ( LONG ) InternetOpen( hb_parc( 1 ), hb_parnl( 2 ), hb_parc( 3 ), hb_parc( 4 ), hb_parnl( 5 ) ) );
}


HB_FUNC( INTERNETCLOSEHANDLE )
{
    hb_retl( InternetCloseHandle( ( HINTERNET ) hb_parnl( 1 ) ) );
}


HB_FUNC( INTERNETCONNECT )
{
    hb_retnl( ( LONG ) InternetConnect( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), ( INTERNET_PORT ) hb_parnl( 3 ), hb_parc( 4 ), hb_parc( 5 ), hb_parnl( 6 ), hb_parnl( 7 ), hb_parnl( 8 ) ) );
}


HB_FUNC( FTPGETFILE )
{
    hb_retl( FtpGetFile( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), hb_parc( 3 ), hb_parl( 4 ), hb_parnl( 5 ), hb_parnl( 6 ), hb_parnl( 7 ) ) );
}


HB_FUNC( FTPPUTFILE )
{
    hb_retl( FtpPutFile( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), hb_parc( 3 ), hb_parnl( 4 ), hb_parnl( 5 ) ) );
}


HB_FUNC( FTPDELETEFILE )
{
    hb_retl( FtpDeleteFile( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ) ) );
}


HB_FUNC( FTPCREATEDIRECTORY )
{
    hb_retl( FtpCreateDirectory( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ) ) );
}


HB_FUNC( FTPREMOVEDIRECTORY )
{
    hb_retl( FtpRemoveDirectory( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ) ) );
}


HB_FUNC( FTPFINDFIRSTFILE )
{
    hb_retnl( ( LONG ) FtpFindFirstFile( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ), ( WIN32_FIND_DATA * ) hb_parc( 3 ), hb_parnl( 4 ), hb_parnl( 5 ) ) );
}


HB_FUNC( INTERNETFINDNEXTFILE )
{
    hb_retl( InternetFindNextFile( ( HINTERNET ) hb_parnl( 1 ), hb_parc( 2 ) ) );
}

#pragma ENDDUMP
 

aproveitei o seu kk, porque inserir nao consigo, mas ta ai

Link to comment
Share on other sites

  • 1 month later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...