Introdução ao SFTP
SFTP é a abreviação do Protocolo de Transferência de Arquivos Seguro, um protocolo de transferência de arquivo seguro. Um método de criptografia de rede seguro pode ser fornecido para transferir arquivos. O SFTP possui quase a mesma sintaxe e funções que o FTP. O SFTP faz parte do SSH e é uma maneira segura de transferir arquivos para um servidor blogger. De fato, no pacote SSH, um subsistema de transferência de informações de arquivo seguro chamado SFTP (Protocolo de Transferência de Arquivos Seguro) já está incluído. O próprio SFTP não possui um daemon separado. Ele deve usar o daemon SSHD (o número da porta é 22 por padrão) para concluir as operações de conexão e resposta correspondentes. Portanto, em certo sentido, o SFTP não é como um programa de servidor, mas mais como um programa de clientes. O SFTP também usa a criptografia para transmitir informações de autenticação e dados transmitidos, por isso é muito seguro usar o SFTP. No entanto, como esse método de transmissão usa a tecnologia de criptografia/descriptografia, a eficiência da transmissão é muito menor que a do FTP comum. Se você possui requisitos de segurança de rede mais altos, poderá usar o SFTP em vez do FTP.
Adicione dependências
<Depencency> <voundid> com.jcraft </frugiD> <ArtifactId> jsch </artifactId> <versão> 0.1.54 </sisters> </pendencence>
Adicione a configuração
SFTP: IP: 192.168.1.60 Porta: 22 Timeout: 60000 AbertyTime: 3 Admin: Nome de usuário: Admin Senha: 2K3XRYJBD930.
Exemplo de código
Faça o download dos arquivos CSV em vários diretórios do usuário às 1 da manhã todos os dias para o diretório TMP local
@ServicePublic Class sftPask estende thread {private canaisftp sftp; sessão privada sessão; @Value ("$ {sftp.admin.username}") private string nome de usuário; @Value ("$ {sftp.admin.password}") private string senha; @Value ("$ {sftp.host}") Private String host; @Value ("$ {sftp.port}") porta inteira privada; private SFTPSERVICE SFTPSERVICE; public etlsftpTask (sftpService sftpService) {this.sftpService = sftpService; } / *** estabeleça uma conexão SFTP* / private void connect () {try {jsch jsch = new jsch (); sessão = jsch.getSession (nome de usuário, host, porta); session.setPassword (senha); session.setConfig ("StricThostKeyChecking", "não"); session.Connect (); Canal canal = session.openchannel ("sftp"); canal.Connect (); canal sftp = (canallftp); } catch (jschException e) {e.printStackTrace (); }} / *** Feche a conexão sftp* / public void Close () {try {if (sftp! = Null) {if (sftp.isconnected ()) sftp.disconnect (); } if (session! = null) {if (session.isconnected ()) session.disconnect (); }} catch (Exceção e) {e.printStackTrace (); }} / ** * Faça o download do arquivo para local * * @param File de origem de origem * @Param Arquivo de destino de destino * @THOWS SFTPEXCECTIONE * @THOWS FILENOTFoundException Exceção * / privado void Download (String fonte, String Target) lança SftPexception, FILENOTFOUNDEXCECTION {SFTP.get (fonte, new FileOutstream (FILHE (FILHE (FILHE (FILHE (FILD) (FILENOTFoundException {SFTP.get, (fonte) (FileOutputPeram (FILD) (FILENOTFoundException) (string) (string); }/*** Processando arquivos de dados do usuário** @Param Root Arquivo Diretório root* @param última hora da última vez, quando o último arquivo foi processado* @return na última vez em processamento do arquivo*/private Inteiro (string root, número inteiro último) {string diretório = root + "/event/"; Arquivos vetoriais; tente {files = sftp.ls (diretório + "evento _*. csv"); } catch (Exceção e) {e.printStackTrace (); retornar 0; } // Nome do arquivo string filename; // string de arquivo temporário tmpfile; // Atualização de arquivo de tempo inteiro mtime; // arquive o último tempo de atualização do tempo MaxTime = LastTime; // Processa arquivos de usuário para (objeto o: arquivos) {try {canaisftp.lSentry f = (canaisftp.lsentry) o; // Atualização do arquivo Time Mtime = f.getAtTrs (). GetMtime (); if (mtime <= lasttime) continuar; // nome do arquivo filename = f.getFilename (); // Último evento de processo maxtime = math.max (maxtime, mtime); // Baixar arquivo tmpfile = "/tmp/" + nome do arquivo; download (diretório + nome do arquivo, tmpfile); } catch (Exceção e) {// Log de erros TODO E.PrintStackTrace (); }} // retorna o último horário de processamento do arquivo retorna maxTime; } / ** * A execução começa às 1 da manhã todos os dias * / @scheduled (cron = "0 0 1 * * *") public void Task () {// Get Sftp Connection Connect (); String root; Inteiro na última hora; CID longo; Número inteiro maxtime = lasttime; // Obtenha a lista de usuários para (sftpdto sftpdto: sftpService.findall ()) {// User Directory Root = sftpdto.getsftProot (); // Última vez do último arquivo Processando o último tempo = sftpdto.getLastTime (); maxTime = math.max (maxTime, handle (root, última hora)); // Atualize o último tempo de processamento se (! Maxtime.equals (última hora)) {sftpdto.setLastTime (maxTime); sftpService.update (sftpdto); }} // Libere o recurso SFTP Close (); }}Resumir
O exposto acima é o código de amostra para Java usando o SFTP para baixar arquivos regularmente. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!