Olá pessoal…
Hoje vou mostrar como enviar um arquivo para um servidor FTP utilizando a linguagem AdvPL.
Através das funções FTPConnect e FTPUpload, fiz uma função para envio de arquivo para o FTP, abaixo o código fonte desenvolvido.
//Bibliotecas
#Include "Protheus.ch"
/*/{Protheus.doc} zFTPEnv
Função que envia um arquivo para um servidor FTP
@author Atilio
@since 28/03/2017
@version 1.0
@param cEndereco, Caracter, Endereço do FTP
@param nPorta, Numerico, Porta de Conexão
@param cUsr, Caracter, Usuário
@param cPass, Caracter, Senha
@param cArq, Caracter, Arquivo a ser enviado (deve estar dentro da \System\)
@return lRet, Retorno lógico se deu certo ou não o envio
/*/
User Function zFTPEnv(cEndereco, nPorta, cUsr, cPass, cArq)
Local aArea := GetArea()
Local lRet := .T.
Local cDirAbs := GetSrvProfString("STARTPATH","")
cDirAbs += "\" + cArq
//Se conseguir conectar
If FTPConnect(cEndereco ,nPorta ,cUsr , cPass )
//Desativa o firewall
FTPSetPasv(.F.)
//Se não conseguir dar o upload
If !FTPUpload(cDirAbs, cArq)
//Realiza mais uma tentativa
If !FTPUpload(cDirAbs, cArq)
lRet:=.F.
EndIf
EndIf
//Desconecta do FTP
FTPDisconnect()
EndIf
RestArea(aArea)
Return lRet
Bom pessoal, por hoje é só.
Abraços e até a próxima.

Muito bom ! me ajudou muito
Opa, nós que agradecemos João.
Grande abraço.
Muito Bacana!
Obrigado Atilio.
Abs.
Opa, eu que agradeço o comentário Francisco.
Grande abraço.
Dan Atilio,
Estou tendo dificuldades com o TFtpClient:Directory.
Nao carrega os arquivos da pasta. Ja tentei muitas coisas e nada.
Você pode me ajudar dando uma dica ?
aFiles := oFTPHandle:Directory(“*.CSV”, .T. ) //TFtpClient:Directory
IF ( Len(aFiles) == 0 )
cLastResp := oFTPHandle:GetLastResponse() //”500 Invalid PORT Command.”
IF ( “500” $ cLastResp )
//Altero para Modo Passivo
lFireWall := oFTPHandle:bFireWallMode
oFTPHandle:bFireWallMode := .T.
//Tento Obter informacoes do arquivo enviado em modo CaseSensitive
aFiles := oFTPHandle:Directory(cFTPCurDir + “/” + “*.CSV”, .T. )
//Restaura Modo Anterior
oFTPHandle:bFireWallMode := lFireWall
EndIF
EndIf
Obrigado.
Eu acho que é a PORTA do FTP.
EU consigo enviara mas receber nao.
500 Invalid PORT Command.
Obrigado.
Pode ser Francisco.
Nesse exemplo do artigo, é usado as funções antigas, não é usado a classe TFtpClient.
Se quiser fazer um teste, tente usar as funções FTPDownload() e FTPDirectory().
1 – Você têm que dar uma dir na raiz, exemplo:
oFtp := tFTPClient():New()
aFtpFile := oFtp:Directory(“*”,.T.)
depois você têm que alterar o dir para a pasta que você quer, exemplo:
2 – If oFtp:ChDir(“/xml/00000/2020/04/23/SAT/Extrato/”) == 0
conout(“Muda o diretório corrente do servidor remoto com sucesso.”)
aFtpFile := oFtp:Directory(“*”,.T.)
else
conout(“Erro Muda o diretório corrente do servidor remoto.”)
endif
Opa, muito obrigado pela contribuição Douglas.
Grande abraço.