Página 1 de 2
Problema com tipclientftp
Enviado: 02 Ago 2014 00:01
por cjp
Pessoal, por favor, vocês vêem algo errado nesta função:
Código: Selecionar todos
Function pegaftp(arqvpeg,pasta)
local ntentativa :=0
ftpproto ="ftp://" //posthilit">ftp://"
ftpserver = ftps //posthilit">ftp.servidor.com.br" endereço de ="posthilit">FTP</span> do site
ftpuser = usftp //Usuário da conta ="posthilit">FTP</span>
ftppass = snhftp //Senha da conta ="posthilit">FTP</span>
curl:=ftpproto+ftpuser+":"+ftppass+"@"+ftpserver
oCred:= tIPCredentials()
oUrl:= turl():new(curl)
oFtp:= tipclientftp():NEW(oUrl,.F.)
oFTP:nConnTimeout := 20000
oFTP:bUsePasv := .T.
@ maxrow()-1,1 clear to maxrow()-1,maxcol()-1
@ maxrow()-1,1 say "Abrindo conexão..."
do while .t.
IF oFTP:Open()=.t.
exit
else
@ maxrow()-1,1 clear to maxrow()-1,maxcol()-1
@ maxrow()-1,1 say "Não abriu o FTP; tentando novamente ("+alltrim(str(nTentativa))+")"
nTentativa++
inkey(5)
if nTentativa>10
return .f.
endif
endif
enddo
@ maxrow()-1,1 clear to maxrow()-1,maxcol()-1
@ maxrow()-1,1 say "Fazendo download do arquivo "+arqvpeg
oFTP:Cwd(pasta)
if !oFtp:DownLoadFile(arqvpeg) //informe o nome do arquivo que você quer baixar
return .f.
endif
oFTP:Close()
@ maxrow()-1,1 clear to maxrow()-1,maxcol()-1
@ maxrow()-1,1 say "Arquivo "+arqvpeg+" baixado com sucesso"
inkey(3)
Return .t.
Não sei porque, ele informa que o arquivo foi baixado, mas não baixa.
Alguém saberia me dizer por que?
Problema com tipclientftp
Enviado: 05 Ago 2014 11:20
por JoséQuintas
O que significa "informa que o arquivo foi baixado", e como identifica que o arquivo não foi baixado?
Olhando o fonte, não consegui identificar o nome do arquivo local.
Provavelmente falta salvar o download em disco.
Problema com tipclientftp
Enviado: 05 Ago 2014 12:07
por cjp
Quis dizer que ele vai até o fim da função sem dar erro, ou seja, a função oFtp:DownLoadFile(arqvpeg) retorna .t., como se o arquivo tivesse sido baixado.
O arquivo não foi baixado, pois ele não se encontra no disco local.
O nome do arquivo a ser baixado está no conteúdo da variável arqvpeg.
Como assim salvar o download? Ao baixar, ele já não salva automaticamente no disco?
Eu tenho uma outra função muito semelhante a esta, que funciona perfeitamente. A única diferença é que esta outra apaga o arquivo do FTP, coisa que esta não faz. Veja:
Código: Selecionar todos
Function recebftp(arqvrec,pasta)
ftpproto ="ftp://" //posthilit">ftp://"
ftpserver = ftps //posthilit">ftp.servidor.com.br" endereço de ="posthilit">FTP</span> do site
ftpuser = usftp //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.
pasta=alltrim(pasta)
nTentativa=0
do while .t.
IF oFTP:Open()=.t.
exit
else
@ maxrow()-1,1 clear to maxrow()-1,maxcol()-1
@ maxrow()-1,1 say "Não abriu o FTP; tentando novamente ("+alltrim(str(nTentativa))+")"
nTentativa++
inkey(5)
if nTentativa>8
erecftp="nao conectou"
return .f.
endif
endif
enddo
nTentativa=0
do while .t.
oFTP:Cwd( "" )
if oFTP:Cwd(pasta)=.t. // informe o diretorio (="posthilit">no</span> site) onde está o arquivo EXE que voce vai copiar
exit
else
@ maxrow()-1,1 clear to maxrow()-1,maxcol()-1
@ maxrow()-1,1 say "Não abriu a pasta no FTP; tentando novamente ("+alltrim(str(nTentativa))+")"
nTentativa++
inkey(3)
if nTentativa>7
erecftp="pasta "+pasta+" não foi aberta"
return .f.
endif
endif
enddo
nTentativa=0
do while .t.
if oFtp:DownLoadFile(arqvrec)=.t. //informe o nome do arquivo que você quer baixar
exit
else
if "atemp"$arqvrec
return .t.
endif
@ maxrow()-1,1 clear to maxrow()-1,maxcol()-1
@ maxrow()-1,1 say "Não recebeu o arquivo "+arqvrec+"; tentando baixar novamente"
nTentativa++
inkey(5)
sele 4
if conexsql()
DBUSEAREA( .T.,, "SELECT * FROM tarefas WHERE usuario='"+us+"'", "recebftp")
locate for data=date() .and. val(substr(hora,1,2))=val(substr(time(),1,2)) .and. acao="Recebim" .and. nrtarefa=arqvrec
if found()
return .t.
endif
endif
use
sele 1
if us="I" .and. nTentativa>2
tone(261.7,nTentativa)
endif
if nTentativa>8
erecftp="não recebeu arquivo"
return .f.
endif
endif
enddo
nTentativa=0
do while .t.
if oFtp:DELE(arqvrec)=.t.
exit
else
@ maxrow()-1,1 clear to maxrow()-1,maxcol()-1
@ maxrow()-1,1 say "Não apagou o arquivo "+arqvrec+" do FTP; tentando novamente ("+alltrim(str(nTentativa))+")"
nTentativa++
inkey(3)
if nTentativa>7
erase exclui.log
if verarqv("exclui.bat")=.t.
__run("exclui " + ftps + " " + usftp + " " + snhftp + " " + pasta + " . " + arqvrec)
cexcl:=ALLTRIM(MEMOREAD("C:\tarefas\exclui.log"))
if at("DELE command successful",cexcl)=0
if us="I"
?"Erro COMUNS 385 - não apaga o arquivo recebido"
tone(261.7,33)
inkey(10)
else
if mandmail1("copp.txt","Não conseguiu excluir arquivo "+arqvrec+ " (COMUNS 386)")=.f.
?"Avisar ao Dr. Inacio que não está apagando o arquivo do FTP"
tone(261.7,33)
endif
endif
endif
else
mandmail1("","Não tem o arquivo exclui.bat")
endif
exit
endif
endif
enddo
oFTP:Close()
Return .t.
Problema com tipclientftp
Enviado: 05 Ago 2014 18:29
por JoséQuintas
Problema com tipclientftp
Enviado: 05 Ago 2014 23:33
por cjp
Se eu entendi tua mensagem, Quintas, vc está dizendo que a sintaxe da oFtp:DownLoadFile que eu estou usando está errada? Mas na outra função eu uso exatamente a mesma sintaxe e funciona. Aliás, eu peguei essa sintaxe neste post:
https://pctoledo.org/forum/viewto ... 7&start=15.
Vc poderia, por favor, me explicar melhor a sintaxe? cTarget é a pasta no ftp? Mas a ausência deste parâmetro não permitiria baixar da pasta corrente? É que, antes de baixar, eu mudo a pasta corrente com oFTP:Cwd(pasta).
Problema com tipclientftp
Enviado: 06 Ago 2014 11:36
por JoséQuintas
target = destino
source = origem
é o nome de onde vém e pra onde vai.
Sempre usei assim.
Olhando o fonte do Harbour 3.2, ftpcli.prg, tem esta anotação:
Código: Selecionar todos
2007-07-12, miguelangel@marchuet.net
Added method :NoOp()
Added method :Rest( nPos )
Changed method :LS( cSpec )
Changed method :List( cSpec )
Changed method :TransferStart()
Changed method :Stor( cFile )
Changed method :UploadFile( cLocalFile, cRemoteFile )
Changed method :DownloadFile( cLocalFile, cRemoteFile )
E o fonte do método assume um default quando não indicado:
Código: Selecionar todos
METHOD DownLoadFile( cLocalFile, cRemoteFile ) CLASS TIPClientFTP
LOCAL cPath
LOCAL cFile
LOCAL cExt
hb_FNameSplit( cLocalFile, @cPath, @cFile, @cExt )
hb_default( @cRemoteFile, cFile + cExt )
Problema com tipclientftp
Enviado: 06 Ago 2014 17:10
por cjp
Então era pra funcionar do jeito que estou fazendo, correto?
Problema com tipclientftp
Enviado: 06 Ago 2014 19:49
por JoséQuintas
Pelo que vi, se o nome do arquivo não contiver nenhuma referência a drive, diretório ou url sim.
Acho que vai baixar no diretório atual do aplicativo.
Tem mais outra coisa a verificar:
O ftp pode ser case sensitive, exigir exatamente as mesmas maiúsculas/minúsculas para o nome do arquivo.
Problema com tipclientftp
Enviado: 07 Ago 2014 00:36
por cjp
Isso eu já verifiquei, o nome do arquivo está todo em minúsculas.
Problema com tipclientftp
Enviado: 09 Ago 2014 23:28
por sygecom
Inacio,
Como o José falou, está faltando colocar o destinho onde deve salvar o arquivo baixado.
Problema com tipclientftp
Enviado: 09 Ago 2014 23:48
por cjp
Seria assim:
Assim também não funcionou.
Mas ao menos agora está retornando .f. Só que o arquivo existe no FTP da forma como o programa está sendo chamado:
.
Problema com tipclientftp
Enviado: 09 Ago 2014 23:59
por sygecom
Inacio, tem que passar o caminho completo do arquivo, exemplo:
Problema com tipclientftp
Enviado: 10 Ago 2014 00:11
por cjp
Assim:
Também não funcionou, retornou .f.
Problema com tipclientftp
Enviado: 10 Ago 2014 11:48
por Jairo Maia
Olá Inácio,
Quando li sua função postado no primeiro post, não vi nada errado com ela, mesmo os colegas indicando para colocar o endereço destino, você tem razão quando diz que se o destino é omitido o arquivo é salvo na pasta corrente. Isto é correto.
No entanto, a única sugestão que eu daria em alteração a sua função seria colocar antes da linha:
oFTP:Cwd(pasta) o seguinte:
Código: Selecionar todos
oFTP:Cwd(".") // se posiciona na pasta raiz
oFTP:Cwd(pasta) // se posiciona na pasta desejada.
Mas não tenho certeza se pode ser isso. Se ainda não funcionar, poste o conteúdo da variável
pasta para tentarmos entender se isso tem a ver também.
Problema com tipclientftp
Enviado: 15 Ago 2014 21:00
por cjp
Isso também não funcionou, Jairo. Continua retornando falso no if oFtp:DownLoadFile(arqvrec)=.t.
Será que não existe um log ou alguma forma de debugar para saber onde está o problema?