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.