Jump to content
Fivewin Brasil

Arquivo vazio baixado do FTP.


Valdir

Recommended Posts

Olá pessoal...

Alguém saberia me dizer o que pode causar o download de um arquivo vazio disponibilizado num FTP ?

Tenho um arquivo (.ini, .txt, .bat..etc.) que mandei pro meu FTP com o objetivo de baixá-los quando necessário.

Na maioria das vezes, funfa legal, porém não sei como e nem o porquê, esses arquivos são baixados vazios.

Exemplo :

Arquivo disponibilizado no FTP : "Teste.ini com 29 Kb. "

Arquivo baixado do FTP : "Teste.ini com 0 Kb. "

Obrigado

Link to comment
Share on other sites

Meus estimados amigos Vagner e João...

Olá Valdir,
Precisa ver como vc está baixando, se está finalizando antes de puxar todos os dados

Se não me engano, foi você quem me passou o código abaixo.

/*---- Funcao para baixar Artquivos do Ftp ----*/
Static Func PegaFtp()
Local oInternet
Local oFTP
Local aFiles
Local aFile := {}
Local aDir,a
oInternet := TInternet():New()
oFTP := TFTP():New( "000.000.000.000", oInternet,"usuarioftp.com.br","senhaftp" )
lOk := .F.
lZip := .F.
If oInternet:hSession # Nil
If ! Empty( oFTP:hFTP )
RecArq(oFtp,oInternet)
Endif
Endif
oInternet:End()
oFtp:End()
Retu("")
/*---- Funcao para Pegar o Arquivo ----*/
Static Func RecArq(oFtp,aFil)
local n,nX,oFile
local hTarget
local cBuffer := Space( 6400 )
Local nBufSize := 6400
Local lIcon := .T.
Local aVerFiles
Local nSeconds
Local nFeito := 0
Local wVEZ:=0
cBuffer := Space( 6400 )
nBufSize := 6400
/*---- Recebe o Arquivo do FTP ----*/
hTarget := FCreate( "C:\TEMP\TESTE.INI" )
oFile := TFtpFile():New( "testeftp/TESTE.INI", oFTP )
If oFile # Nil
oFile:OpenRead()
nSeconds := Seconds()+600
nTot := 0
lErro := .F.
while ( nBytes := Len( cBuffer := oFile:Read( nBufSize ) ) ) > 0
FWrite( hTarget, cBuffer, nBytes )
SysRefresh()
nTot += nBytes
If Seconds() > nSeconds
lErro := .T.
Endif
end
FClose( hTarget )
oFile:End()
If !lErro
MsGRun("Recebidos "+Tran(nTot,"9999999999")+" Bytes")
cArq:="TESTE.INI"
/*---- Mandar para o Diretório de Copias ----*/
cBuffer := Space( 12800 )
nBufSize := 12800
hSource := FOpen( "C:\TEMP\TESTE.INI" )
hTarget := FCreate( "C:\TEMP\TESTE.INI" )
While ( nBytes := FRead( hSource, @cBuffer, nBufSize ) ) > 0
FWrite( hTarget, cBuffer, nBytes )
SysRefresh()
End
FClose( hSource )
FClose( hTarget )
//*---- Elimina do Diretório do FTP ----*
oFtp:DeleteFile( "testeftp/TESTE.INI" )
++nFeito
Endif
Endif
Retu("")

Blz. meu amigo, vou testar.

Obrigado pelas respostas.

abração

Link to comment
Share on other sites


Function FtpUpload(cServer,cUser,cPassword,cFile,cDirectory,cUploadDirectory,oObjeto,cMensagem)

Local cUrl,oUrl,oFTP,aFiles,cStr ,lRetorno

Default cServer:="",cUser:="",cPassword:="",cFile:="",cDirectory:="",cUploadDirectory:=""

cServer:=alltrim(cServer)

cUser:=alltrim(cUser)

cPassword:=alltrim(cPassword)

if Empty(cServer)

msgAlert("Atenção Host não informado!","Alerta")

return .f.

endif

if Empty(cUser)

msgAlert("Atenção Usuario não informado!","Alerta")

return .f.

endif

if Empty(cPassword)

msgAlert("Atenção Senha não informado!","Alerta")

return .f.

endif

if Empty(cFile)

if Empty(cDirectory)

msgAlert("Atenção Arquivo ou Diretório não informado!","Alerta")

return .f.

endif

endif

if !isConnected()

msgAlert("Atenção Sem Conexão com a Internet!","Alerta")

return .f.

endif

cUrl := "ftp://" + cUser + ":" + cPassword + "@" + cServer

oUrl := tUrl():New( cUrl )

oFTP := tIPClientFtp():New( oUrl, file("c:\desenv.sys") )

oFTP:nDefaultPort := 21

oFTP:nConnTimeout := 3000

oFTP:bUsePasv := .T.

if At("@",cUrl)>0

oFTP:oUrl:cServer := cServer

oFTP:oUrl:cUserID := cUser

oFTP:oUrl:cPassword := cPassword

endif

if Empty(cDirectory)

if !Empty(cFile)

IF oFTP:Open( oFTP:oUrl )

oFTP:oUrl:cPath := cUploadDirectory

Try

cMensagem:="Enviando: "+cFile

oObjeto:Refresh()

Catch

SysRefresh()

end

IF !oFtp:UploadFile( cFile, cFileName(cFile))

msgstop("Falha ao enviar ,"+if(!file(cFile),"Arquivo não existe","arquivo em uso")+" : "+cFile,"Erro")

lRetorno := .f.

ELSE

oFTP:oUrl:cPath := ""

lRetorno := .t.

ENDIF

SysWait()

oFTP:Close()

ELSE

lRetorno:=.f.

ENDIF

endif

Else

aFiles := Directory( cDirectory )

IF Len( aFiles ) > 0

IF oFTP:Open( oFTP:oUrl )

oFTP:oUrl:cPath := cUploadDirectory

FOR each cFile IN afiles

Try

cMensagem:="Enviando: "+cFile[ 1 ]

oObjeto:Refresh()

Catch

SysRefresh()

end

IF !oFtp:UploadFile( cDirectory+cFile[ 1 ],cFile[ 1 ] )

msgstop("Falha ao enviar ,"+if(!file(cDirectory+cFile[ 1 ]),"arquivo não existe","arquivo em uso")+" : "+cDirectory+cFile[ 1 ],"Erro")

ELSE

oFTP:oUrl:cPath := ""

lRetorno := .t.

ENDIF

SysWait()

NEXT

oFTP:Close()

ELSE

lRetorno := .F.

ENDIF

ENDIF

endif

if !lRetorno

cStr := "Não foi possivel conectar ao Ftp:" + oURL:cServer

IF oFTP:SocketCon == NIL

cStr += Chr( 13 ) + Chr( 10 ) + "Conexão não iniciada!"

ELSEIF InetErrorCode( oFTP:SocketCon ) == 0

cStr += Chr( 13 ) + Chr( 10 ) + "Resposta do Servidor:" + " " + oFTP:cReply

ELSE

cStr += Chr( 13 ) + Chr( 10 ) + "Erro na Conexão:" + " " + InetErrorDesc( oFTP:SocketCon )

ENDIF

SysRefresh()

msgstop(cStr,"Erro")

lRetorno := .F.

endif

RETURN lRetorno

Function FtpArquivos(cServer,cUser,cPassword,cDirectory)

Local oUrl , cUrl , oFtp , cStr ,aArquivos:={}

Default cServer:="",cUser:="",cPassword:="",cDirectory:=""

cServer:=alltrim(cServer)

cUser:=alltrim(cUser)

cPassword:=alltrim(cPassword)

cDirectory:=alltrim(cDirectory)

if Empty(cServer)

msgAlert("Atenção Host não informado!","Alerta")

return {}

endif

if Empty(cUser)

msgAlert("Atenção Usuario não informado!","Alerta")

return {}

endif

if Empty(cPassword)

msgAlert("Atenção Senha não informado!","Alerta")

return {}

endif

if Empty(cDirectory)

msgAlert("Atenção Diretório não informado!","Alerta")

return {}

endif

if !isConnected()

msgAlert("Atenção Sem Conexão com a Internet!","Alerta")

return {}

endif

cUrl := "ftp://" + cUser + ":" + cPassword + "@" + cServer

oUrl := tUrl():New( cUrl )

oFTP := tIPClientFtp():New( oUrl, file("c:\desenv.sys") )

oFTP:nDefaultPort := 21

oFTP:nConnTimeout := 3000

oFTP:bUsePasv := .T.

if At("@",cUrl)>0

oFTP:oUrl:cServer := cServer

oFTP:oUrl:cUserID := cUser

oFTP:oUrl:cPassword := cPassword

endif

IF oFTP:Open( oFTP:oUrl )

oFtp:cwd(cDirectory)

aArquivos := oFtp:listFiles()

ELSE

cStr := "Não foi possivel conectar ao Ftp:" + oURL:cServer

IF oFTP:SocketCon == NIL

cStr += Chr( 13 ) + Chr( 10 ) + "Conexão não iniciada!"

ELSEIF InetErrorCode( oFTP:SocketCon ) == 0

cStr += Chr( 13 ) + Chr( 10 ) + "Resposta do Servidor:" + " " + oFTP:cReply

ELSE

cStr += Chr( 13 ) + Chr( 10 ) + "Erro na Conexão:" + " " + InetErrorDesc( oFTP:SocketCon )

ENDIF

msgstop(cStr,"Erro")

ENDIF

SysRefresh()

return aArquivos

Function FtpDownload(cServer,cUser,cPassword,cLocalFile,cRemoteFile,cRemoteDir)

Local oUrl , cUrl , oFtp , cStr , lRetorno

Default cServer:="",cUser:="",cPassword:="",cRemoteFile:="",cRemoteDir:="",cLocalFile:=""

cServer:=alltrim(cServer)

cUser:=alltrim(cUser)

cPassword:=alltrim(cPassword)

if Empty(cServer)

msgAlert("Atenção Host não informado!","Alerta")

return .f.

endif

if Empty(cUser)

msgAlert("Atenção Usuario não informado!","Alerta")

return .f.

endif

if Empty(cPassword)

msgAlert("Atenção Senha não informado!","Alerta")

return .f.

endif

if Empty(cRemoteFile)

msgAlert("Atenção Arquivo não informado!","Alerta")

return .f.

endif

if !isConnected()

msgAlert("Atenção Sem Conexão com a Internet!","Alerta")

return .f.

endif

cUrl := "ftp://" + cUser + ":" + cPassword + "@" + cServer

oUrl := tUrl():New( cUrl )

oFTP := tIPClientFtp():New( oUrl, file("c:\desenv.sys") )

oFTP:nDefaultPort := 21

oFTP:nConnTimeout := 3000

oFTP:bUsePasv := .T.

if At("@",cUrl)>0

oFTP:oUrl:cServer := cServer

oFTP:oUrl:cUserID := cUser

oFTP:oUrl:cPassword := cPassword

endif

IF oFTP:Open( oFTP:oUrl )

oFTP:oUrl:cPath := cRemoteDir

IF !oFtp:DownloadFile( cLocalFile,cRemoteFile )

lRetorno := .F.

ELSE

lRetorno := .t.

ENDIF

oFTP:Close()

ELSE

cStr := "Não foi possivel conectar ao Ftp:" + oURL:cServer

IF oFTP:SocketCon == NIL

cStr += Chr( 13 ) + Chr( 10 ) + "Conexão não iniciada!"

ELSEIF InetErrorCode( oFTP:SocketCon ) == 0

cStr += Chr( 13 ) + Chr( 10 ) + "Resposta do Servidor:" + " " + oFTP:cReply

ELSE

cStr += Chr( 13 ) + Chr( 10 ) + "Erro na Conexão:" + " " + InetErrorDesc( oFTP:SocketCon )

ENDIF

msgstop(cStr,"Erro")

lRetorno:=.f.

ENDIF

SysRefresh()

RETURN lRetorno

Function FtpDeletaArquivo(cServer,cUser,cPassword,cRemoteFile,cRemoteDir)

Local oUrl , cUrl , oFtp , cStr , lRetorno

Default cServer:="",cUser:="",cPassword:="",cRemoteFile:="",cRemoteDir:=""

cServer:=alltrim(cServer)

cUser:=alltrim(cUser)

cPassword:=alltrim(cPassword)

if Empty(cServer)

msgAlert("Atenção Host não informado!","Alerta")

return .f.

endif

if Empty(cUser)

msgAlert("Atenção Usuario não informado!","Alerta")

return .f.

endif

if Empty(cPassword)

msgAlert("Atenção Senha não informado!","Alerta")

return .f.

endif

if Empty(cRemoteFile)

msgAlert("Atenção Arquivo não informado!","Alerta")

return .f.

endif

if !isConnected()

msgAlert("Atenção Sem Conexão com a Internet!","Alerta")

return .f.

endif

cUrl := "ftp://" + cUser + ":" + cPassword + "@" + cServer

oUrl := tUrl():New( cUrl )

oFTP := tIPClientFtp():New( oUrl, file("c:\desenv.sys") )

oFTP:nDefaultPort := 21

oFTP:nConnTimeout := 3000

oFTP:bUsePasv := .T.

if At("@",cUrl)>0

oFTP:oUrl:cServer := cServer

oFTP:oUrl:cUserID := cUser

oFTP:oUrl:cPassword := cPassword

endif

IF oFTP:Open( oFTP:oUrl )

IF !oFtp:Dele( cRemoteDir+cRemoteFile )

lRetorno := .F.

ELSE

lRetorno := .t.

ENDIF

oFTP:Close()

ELSE

cStr := "Não foi possivel conectar ao Ftp:" + oURL:cServer

IF oFTP:SocketCon == NIL

cStr += Chr( 13 ) + Chr( 10 ) + "Conexão não iniciada!"

ELSEIF InetErrorCode( oFTP:SocketCon ) == 0

cStr += Chr( 13 ) + Chr( 10 ) + "Resposta do Servidor:" + " " + oFTP:cReply

ELSE

cStr += Chr( 13 ) + Chr( 10 ) + "Erro na Conexão:" + " " + InetErrorDesc( oFTP:SocketCon )

ENDIF

msgstop(cStr,"Erro")

lRetorno:=.f.

ENDIF

SysRefresh()

RETURN lRetorno

Link to comment
Share on other sites

  • 3 weeks later...

Olá pessoal...

Novamente estou com problemas ao baixar um arquivo do meu FTP...

O arquivo vem vazio conforme reportado acima.

O pior de tudo é que não é sempre que isso ocorre. Tô ficando doidcho... kkkk

Matheus... essas funções são de qual classe FTP ?

Vagner e demais amigos... existem outras opções para realizar essas tarefas ?

Obrigado

Link to comment
Share on other sites

Fala Tranka....

Obrigado por responder, porém acredito que o problema esteja relacionado com os tipos de Protocolos :

"FTP://", "FTPS://" ou "SFTP://"

As funções baseadas na WinInet.dll parecem funcionar somente no protocolo "FTP://" e não nos demais.

Acredito que isso ocorra para aumentar a segurança dos Servidores de FTP. Vai saber né ?

Se tiver outras sugestões, agradeço.

abração.

Link to comment
Share on other sites

Olá Valdir,

Coloque um syswait() dentro do While

Não sei pq eu não consigo mais colar nada no fórum :(, nem responder com quote

então coloque um syswait, e veja se está retornando a quantidade de bytes

Boas... meu amigo:

Ontem refiz o teste colocando o Syswait() e verifiquei que retornava zero.

Reclamei com o Suporte do meu provedor e descobri que eles colocaram algumas restrições de segurança.

Depois de muito brigar, consegui que liberassem essas restrições e tudo voltou a funcionar normalmente.

O pior de tudo é que eles fazem alterações sem nos comunicar. São uns Kraio mesmo...

Mais uma vez, Obrigado pela sua ajuda.

abração.

Link to comment
Share on other sites

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