Página 3 de 4

Dois Exemplos de FTP - DownLoad

Enviado: 16 Set 2012 00:10
por sygecom
cjp escreveu:Meus caros,

Vocês sabem me informar se pela função oftp:Downloadfile() seria possível baixar de uma vez todos os arquivos que estiverem em determinada pasta do FTP?
Tente:
oFtp:MGET( ,'c:\nome_pasta\' )

Dois Exemplos de FTP - DownLoad

Enviado: 16 Set 2012 00:41
por cjp
Era exatamente isto que eu queria, meu caro.

Mas, infelizmente, está dando o seguinte erro:


Subsystem Call ....: BASE
System Code .......: 1066
Default Status ....: .F.
Description .......: Argument error
Operation .........: conditional
Arguments .........: [ 1] = Type: C Val: .
l3-12.pdf
Lista de aniversariantes da Classe2.xls


O que seria este Argument error, por favor?

Dois Exemplos de FTP - DownLoad

Enviado: 19 Set 2012 01:00
por cjp
Por favor, alguém me ajude. Estou precisando usar essa oFtp:MGET.

Alguém poderia me dar uma mão?

Dois Exemplos de FTP - DownLoad

Enviado: 19 Set 2012 02:54
por JoséQuintas
No meu sistema já deixei algo neste estilo:
If .Not. DownloadLIbHarbour()
DownloadSoap()

É que pelas LIBs do Harbour falha a cada uma ou das semanas, e pelo SOAP nunca.
Só mantive pra de vez em quando, quando funcionar, aparecer o gráfico de download.

Se for testar na época da falha... vai pensar que está fazendo errado.

Dois Exemplos de FTP - DownLoad

Enviado: 19 Set 2012 10:22
por sygecom
Olá Cjp,
cjp escreveu:Era exatamente isto que eu queria, meu caro.

Mas, infelizmente, está dando o seguinte erro:
Post por favor um exemplo completo de como está usando.

Olá José,
JoséQuintas escreveu: É que pelas LIBs do Harbour falha a cada uma ou das semanas, e pelo SOAP nunca.
Que isso José, você um cara esperto e sabe que LIB é LIB, ela não não muda o código a cada semana sozinha, você precisa entender o que está fazendo de errado, um grande coisa que a maioria do pessoal comete de erro com FTP são as conexões simultâneas que a maioria dos provedor bloqueia isso, varios já entraram em contato comigo com endereços de links errados, falta de permissão, e sem contar a questão do FTP PASSIVO, PORTA DO FTP,CODIFICAÇÃO UTF8, TSL e etc...
Eu uso essa LIB a ANOS e não tenho problemas, faz barra progressiva, envio backup para FTP e tudo mais....

Revisem e revisem, quando se trata de LINK's uma letra em Minusculo ou Maiúsculo ou até mesmo uma barra errada já mela tudo...

Dois Exemplos de FTP - DownLoad

Enviado: 19 Set 2012 22:18
por fladimir
Pelo meu uso aki constante tb em vários clientes percebo q ocorre exatamente isto q o Leo comentou, qdo por exemplo da um PICO de acessos simultâneos ocorrem problemas, mas não devido ao sistema e sim devido ao acesso simultâneo via FTP, eu não estudei como contornar isto pois se esperar um pouco e tentar funciona normalmente....

O q li por cima, não estudei a fundo, é q se eu fizer o acesso via HTTP e o download tb não terei o problema de acessos simultâneos da mesma maneira q estou tendo eventualmente com o FTP... bom mas isto já é outra história...

[]´s

Dois Exemplos de FTP - DownLoad

Enviado: 20 Set 2012 00:08
por cjp
Estou usando assim, meu caro:

Código: Selecionar todos

Function recebftp(arqvrec,pasta)
	ftpproto ="ftp://" //posthilit">ftp://"
	ftpserver = "ftp.inaciocarvalho.com.br" //posthilit">ftp.servidor.com.br"  endereço de ="posthilit">FTP</span> do site
	ftpuser = "promotor"   //Usuário da conta ="posthilit">FTP</span>
	ftppass = snhftp    //Senha da conta ="posthilit">FTP</span>
	curl:=ftpproto+ftpuser+":"+ftppass+"@"+ftpserver
	oUrl:= turl():new(curl)
	oCred:= tIPCredentials()
	oFtp:= tipclientftp():NEW(oUrl,,.T.)
	oFTP:nConnTimeout := 20000
	oFTP:bUsePasv     := .T.
	IF oFTP:Open()=.f.
	   usooff="S"
	   erecftp="nao conectou"
           RETURN .F.
	endif   
	if oFTP:Cwd(pasta)=.f.	// informe o diretorio (="posthilit">no</span> site) onde está o arquivo EXE que voce vai copiar
	   erecftp="nao abriu pasta "+pasta
	   return .f.
	endif
	if oFtp:DownLoadFile(arqvrec)=.f.  //informe o nome do arquivo que você quer baixar
	   erecftp="nao recebeu arquivo"
	   return .f.
        endif
	oFtp:DELE(arqvrec)
	oFTP:Close()
Return .t.

Dois Exemplos de FTP - DownLoad

Enviado: 21 Set 2012 13:46
por sygecom
Olá Inacio,
Veja um erro na linha:
oFtp:= tipclientftp():NEW(oUrl,,.T.)
tente mudar para:
oFtp:= tipclientftp():NEW(oUrl,.F.) // cuida as virgulas, no seu exemplo tem uma a mais

Outra coisa que não sei se faz diferença, mas no meu ftp está primeiro:
oFtp:= tipclientftp():NEW(oUrl,.F.)
depois:
oUrl:= turl():new(curl)

Dois Exemplos de FTP - DownLoad

Enviado: 21 Set 2012 23:19
por cjp
Eu copiei a função da sugestão dos colegas daqui.

Fiz as alterações que vc recomendou. Vou testar.

Muito obrigado.

Inacio

Dois Exemplos de FTP - DownLoad

Enviado: 15 Mai 2015 15:33
por BOB HALL
Funcionou perfeitamente, so que tenho uma duvida de como verificar se um arquivo especifico esta na pasta do ftp.

Dois Exemplos de FTP - DownLoad

Enviado: 15 Mai 2015 16:21
por cjp
Oi, Bob,

Eu criei uma função para isso. Veja se te ajuda:

Código: Selecionar todos

Function listaftp(pasta)
	     ftpproto ="ftp://" //posthilit">ftp://"
	     ftpserver = ftps // posthilit">ftp.servidor.com.br"  endere‡o de ="posthilit">FTP</span> do site
	     ftpuser = "xxx"   //Usu rio da conta ="posthilit">FTP</span>
	     curl:=ftpproto+ftpuser+":"+snhftp+"@"+ftpserver
	     oUrl:= turl():new(curl)
	     oCred:= tIPCredentials()
	     oFtp:= tipclientftp():NEW(oUrl,.T.)
	     oFTP:nConnTimeout := 20000
	     oFTP:bUsePasv     := .T.
		 pasta=alltrim(pasta)
		 nTentativas=0
		 do while .t.
	        IF oFTP:Open()
			   exit
			else
			   nTentativas++
			   @ maxrow()-1,1 clear to maxrow()-1,maxcol()-1
			   @ maxrow()-1,1 say "Tentando abrir o FTP (listaftp) ("+alltrim(str(nTentativas))+")"
			   if us="I" .and. (nTentativas=3 .or. nTentativas>8)
			      tone(261.7,nTentativas)
			   endif
			   inkey(20)
			   if (nTentativas>10 .or. usooff="S")
			      if val(substr(time(),5,1))>7
                     mandmail1("","NÆo abriu o FTP no listaftp")		 
				  endif
				  usooff="S"
                  return .f.		 
			   endif
			endif
		 enddo
		 
		 if !empty(pasta)
            nTentativas := 0
			oFTP:Cwd( "" )
            While oFTP:Cwd(pasta)=.f.
			      oFTP:pwd()
			      if us="I"
				     @ maxrow()-1,1 say "NÆo conseguiu abrir a pasta do FTP; tentando novamente ("+alltrim(str(nTentativas))+")"
                     ?oftp:creply
					 if nTentativas>6
					    tone(261.7,nTentativas)
					 endif
				  endif
                  InKey( 11.5 ) // aguarda
                  nTentativas++
                  If nTentativas >8 
                     if us="I"
                        cls
                        ?"Conferir pasta: "+pasta
						?"Conferir oFTP:cReply: "+oFTP:cReply
                        tone(261.7,33)
						inkey(10)
                     endif
					 if val(substr(time(),5,1))>7
                        mandmail1("","Conferir pasta no listaftp: "+pasta+"; "+oFTP:cReply)
					 endif
                     return .f.
                  EndIf
            EndDo	   
		 endif
			nTentativas=0
			do while .t.
               clista:=oFTP:List()
               if valtype(clista)="U"
			      nTentativas++
				  if us="I" .and. nTentativas>5
				     @ maxrow()-1,1 clear to maxrow()-1,maxcol()-1
				     @ maxrow()-1,1 say "Clista est  indefinida no listaftp"
					 tone(261.7,nTentativas-2)
					 inkey(5)
				  endif
				  if nTentativas>7 
				     if val(substr(time(),5,1))>7
                        mandmail1("","Clista indefinido com valtype")
				     endif
				     return .f.
			      endif
			   else
			      exit
			   endif
			enddo
			nTentativas=0
            nvestr={}
            aadd(nvestr,{"nome","C",20,00})
			do while .t.
			   arqbaixa="aq"+substr(time(),4,2)+substr(time(),7,2)
			   if file(arqbaixa+".dbf")
			      erase (arqbaixa)+".dbf"
			   else
                  bError := ErrorBlock( {|e| Break(e) } )
                  begin sequence
                        dbcreate(arqbaixa,nvestr)
                  recover using e
	                    cMessage := ErrorMessage(e)
	                    logerro()
                  endsequence
                  ErrorBlock( bError )
			      exit
			   endif
			   nTentativas++
			   if nTentativas>50
			      if val(substr(time(),5,1))>7
			         mandmail1("","NÆo conseguiu apagar o arqbaixa ("+arqbaixa+") no listaftp; verificar se vai conseguir usar a base adiante",,2)
				  endif
			      exit
			   endif
			   inkey(1)
			enddo
			if usebase(arqbaixa,"S")=.t.
			   dele all
			   pack
			   clista=substr(clista,57)
			   do while .t.
                  if empty(clista) .or. at("www.ina",clista)=1
				     exit
                  endif
                  nrfinal=at(".",substr(clista,1,10))+3

				  if at(".",substr(clista,nrfinal,5))=0
                     append blank
                     repl nome with substr(clista,1,nrfinal)
                  else
                     nrfinal=nrfinal+4
                  endif						
				  clista=substr(clista,nrfinal+59)
				  if len(clista)<5
				     exit
				  endif
			   enddo
            else
               cadativ("Listaftp","NÆo abriu arqbaixa",arqbaixa,0," ",0,0," ")
			   if val(substr(time(),5,1))>7
                  mandmail1("","Listaftp nÆo est  abrindo a base arqbx")			
			   endif
			   return .f.
			ENDIF
			oFTP:cwd( "" )
            oFTP:Close()
Return .t.


Dois Exemplos de FTP - DownLoad

Enviado: 30 Mai 2015 12:44
por Abel
ola pessoal,
ja testei varios exemplos aqui do forum para envio de arquivo via ftp, mas nao consigo

ele nao envia e quando vou ver se o arquivo carregou, ele esta la no site com 0 bytes.

nao sei se ajuda, mas eu to tentando enviar para a locaweb.


o download funciona perfeitamente com barra progressiva, mas o envio ..nao vai mesmo.

grato,
ABEL

Dois Exemplos de FTP - DownLoad

Enviado: 31 Mai 2015 02:22
por cjp
Abel, seria bom vc postar a função na qual vc está tentando enviar, para eventualmente alguém poder te ajudar a examiná-la e ver se tem algum problema que está impedindo o envio.

Dois Exemplos de FTP - DownLoad

Enviado: 06 Jun 2015 11:38
por Abel
Ola, cjp.

segue um dos exemplos para envio de arquivo via ftp, que acaba travando no envio.

Código: Selecionar todos



#include "common.ch"
#include "directry.ch"

PROCEDURE MAIN( cMask )

   ? TRP20FTPEnv( cMask  )

   RETURN

/**********************************************************************
 *
 *     Static Function TRP20FTPEnv()
 *
 **********************************************************************/

STATIC FUNCTION TRP20FTPEnv( cCarpeta )

   LOCAL aFiles
   LOCAL cUrl
   LOCAL cStr
   LOCAL lRetorno  := .T.
   LOCAL oUrl
   LOCAL oFTP
   LOCAL cUser
   LOCAL cServer
   LOCAL cPassword
   LOCAL cFile     := ""

   cServer   := "ftp.xxxxxxx.br"  // "ftpserver"   /* change ftpserver to the real name  or ip of your ftp server */
   cUser     := "xxxxxxx"                // "ftpuser"     /* change ftpuser to an valid user on ftpserer */
   cPassword := "xxxxxx"                // "ftppass"     /* change ftppass  to an valid password for ftpuser */
   cUrl      := "ftp://" + cUser + ":" + cPassword + "@" + cServer+":21"

   /* Leemos ficheros a enviar */
   aFiles := Directory( cCarpeta )

   IF Len( aFiles ) > 0

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

      /* Comprobamos si el usuario contiene una @ para forzar el userid */
      IF At( "@", cUser ) > 0
         oFTP:oUrl:cServer   := cServer
         oFTP:oUrl:cUserID   := cUser
         oFTP:oUrl:cPassword := cPassword
      ENDIF

      IF oFTP:Open( cUrl )
         FOR EACH cFile IN afiles
            ? "arquivo : " + cFile[ F_NAME ]
            IF ! oFtp:UploadFile( cFile[ F_NAME ] )
               ?? oFtp:UploadFile( cFile[ F_NAME ] )
               lRetorno := .F.
               EXIT
            ELSE
               lRetorno := .T.
            ENDIF

         NEXT
         oFTP:Close()
      ELSE
         cStr := "No se ha podido conectar con el servidor FTP" + " " + oURL:cServer
         IF oFTP:SocketCon == NIL
            cStr += Chr( 13 ) + Chr( 10 ) + "Conexi¾n no inicializada"
         ELSEIF hb_InetErrorCode( oFTP:SocketCon ) == 0
            cStr += Chr( 13 ) + Chr( 10 ) + "Respuesta del servidor:" + " " + oFTP:cReply
         ELSE
            cStr += Chr( 13 ) + Chr( 10 ) + "Error en la conexi¾n:" + " " + hb_InetErrorDesc( oFTP:SocketCon )
         ENDIF
         ? cStr
         lRetorno := .F.
      ENDIF
   ENDIF

   RETURN lRetorno


Dois Exemplos de FTP - DownLoad

Enviado: 06 Jun 2015 11:54
por cjp
Está apontando algum erro no envio? Ou dá como enviado mas não envia?

Recentemente tive um problema assim: aparentemente enviava, mas o arquivo fica com 0 byte no FTP. Depois de muitas tentativas, descobri que o problema era falta de espaço no FTP. Vc já verificou se não seria este o teu caso?