Dois Exemplos de FTP - DownLoad

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Dois Exemplos de FTP - DownLoad

Mensagem 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\' )
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Dois Exemplos de FTP - DownLoad

Mensagem 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?
Inacio de Carvalho Neto
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Dois Exemplos de FTP - DownLoad

Mensagem por cjp »

Por favor, alguém me ajude. Estou precisando usar essa oFtp:MGET.

Alguém poderia me dar uma mão?
Inacio de Carvalho Neto
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Dois Exemplos de FTP - DownLoad

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Dois Exemplos de FTP - DownLoad

Mensagem 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...
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Dois Exemplos de FTP - DownLoad

Mensagem 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
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Dois Exemplos de FTP - DownLoad

Mensagem 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.
Editado pela última vez por Pablo César em 20 Set 2012 08:27, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Inacio de Carvalho Neto
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Dois Exemplos de FTP - DownLoad

Mensagem 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)
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Dois Exemplos de FTP - DownLoad

Mensagem 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
Inacio de Carvalho Neto
BOB HALL
Usuário Nível 1
Usuário Nível 1
Mensagens: 2
Registrado em: 16 Jun 2009 14:21
Localização: parana

Dois Exemplos de FTP - DownLoad

Mensagem por BOB HALL »

Funcionou perfeitamente, so que tenho uma duvida de como verificar se um arquivo especifico esta na pasta do ftp.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Dois Exemplos de FTP - DownLoad

Mensagem 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.

Inacio de Carvalho Neto
Abel
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 14 Mar 2012 13:16
Localização: sao paulo / sp

Dois Exemplos de FTP - DownLoad

Mensagem 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
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Dois Exemplos de FTP - DownLoad

Mensagem 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.
Inacio de Carvalho Neto
Abel
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 14 Mar 2012 13:16
Localização: sao paulo / sp

Dois Exemplos de FTP - DownLoad

Mensagem 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

cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Dois Exemplos de FTP - DownLoad

Mensagem 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?
Inacio de Carvalho Neto
Responder