Introducción a SFTP
SFTP es la abreviatura del protocolo de transferencia de archivos seguro, un protocolo de transferencia de archivos seguro. Se puede proporcionar un método de cifrado de red seguro para transferir archivos. SFTP tiene casi la misma sintaxis y funciones que FTP. SFTP es parte de SSH y es una forma segura de transferir archivos a un servidor Blogger. De hecho, en el paquete SSH, ya se incluye un subsistema de transferencia de información de archivo seguro llamado SFTP (protocolo de transferencia de archivos seguro). SFTP en sí no tiene un demonio separado. Debe usar el demonio SSHD (el número de puerto es 22 por defecto) para completar las operaciones de conexión y respuesta correspondientes. Por lo tanto, en cierto sentido, SFTP no es como un programa de servidor, sino más bien como un programa de cliente. SFTP también utiliza el cifrado para transmitir información de autenticación y datos transmitidos, por lo que es muy seguro usar SFTP. Sin embargo, debido a que este método de transmisión utiliza tecnología de cifrado/descifrado, la eficiencia de transmisión es mucho menor que la del FTP ordinario. Si tiene mayores requisitos de seguridad de red, puede usar SFTP en lugar de FTP.
Agregar dependencias
<Spendency> <MoupRId> com.jcraft </groupid> <artifactId> jsch </arfactid> <versión> 0.1.54 </versions> </pendency>
Agregar configuración
SFTP: IP: 192.168.1.60 Puerto: 22 Tiempo de espera: 60000 RETRYTIME: 3 Admin: Nombre de usuario: Administrador Contraseña: 2k3xryjbd930.
Ejemplo de código
Descargue archivos CSV en múltiples directorios de usuarios a la 1 a.m. todos los días al directorio local de TMP
@ServicePublic Class SftPTask extiende el hilo {canales privadosftp sftp; sesión de sesión privada; @Value ("$ {sftp.admin.username}") String private String UserName; @Value ("$ {sftp.admin.password}") contraseña de cadena privada; @Value ("$ {sftp.host}") Private String Host; @Value ("$ {sftp.port}") Puerto entero privado; SftpService privado SftpService; Public EtlSftPTask (Sftpservice Sftpservice) {this.sftpservice = sftpservice; } / *** Establecer una conexión SFTP* / private void conecte () {try {jsch jsch = new JSch (); sesión = jsch.getSession (nombre de usuario, host, puerto); session.setPassword (contraseña); session.setConfig ("StricthostKeyChecking", "No"); session.connect (); Canal canal = session.openchannel ("sftp"); Channel.connect (); sftp = (Channelsftp) canal; } catch (jschexception e) {E.PrintStackTrace (); }} / *** Cerrar la conexión SFTP* / public void Close () {try {if (sftp! = Null) {if (sftp.isconnected ()) sftp.disconnect (); } if (session! = null) {if (session.isconnected ()) session.disconnect (); }} catch (Exception e) {E.PrintStackTrace (); }} / ** * Descargue el archivo en local * * @param Fuente de origen * @param Archivo de destino de destino * @throws sftpexception Exception * @throws filenotFoundException Exception * / private void download (String Source, String Target) lanza sftPexception, filenotfoundException {sftp.get (fuente, nuevo archivo de archivo (nuevo archivo)); }/*** Procesar archivos de datos de usuario** @Param Directorio raíz del archivo root* @param la última vez cuando se procesó el último archivo* @return la última vez de procesar el archivo*/private entero (string root, integer último) {string directorio = root + "/event/"; Archivos de vector; intente {files = sftp.ls (directorio + "evento _*. csv"); } catch (Exception e) {E.PrintStackTrace (); regresar 0; } // Nombre de archivo String FileName; // cadena de archivo temporal tmpfile; // Tiempo de actualización de archivo Integer mtime; // Archivo Último tiempo de actualización Integer entero maxtee = LastTime; // Procesar archivos de usuario para (objeto o: archivos) {try {channelsftp.lsentry f = (channelsftp.lsentry) o; // Tiempo de actualización de archivo mtime = f.getattrs (). GetMtime (); if (mtime <= orttime) continuar; // nombre de archivo FileName = F.GetFileName (); // Último evento de proceso maxtee = math.max (maxteMe, mtime); // Descargar archivo tmpfile = "/tmp/" + filename; descargar (directorio + nombre de archivo, tmpfile); } catch (Exception e) {// TODO Error log E.PrintStackTrace (); }} // Devuelve la última hora de procesamiento del archivo de retorno máximo de retorno; } / ** * La ejecución comienza a la 1 a.m. todos los días * / @scheduled (cron = "0 0 1 * * *") public void tarea () {// get sftp conection conect (); Raíz de cadena; Entero pasado; Cid largo; Integer maxtime = LastTime; // Obtener lista de usuarios para (Sftpdto sftpdto: sftpservice.findall ()) {// Directorio de inicio del usuario root = sftpdto.getsftproot (); // la última vez del último procesamiento de archivos lasttime = sftpdto.getlasttime (); maxteMe = Math.max (MaxteMe, Handle (Root, LastTime)); // Actualiza el último tiempo de procesamiento si (! MaxTime.equals (LastTime)) {sftpdto.setLastTime (maxtee); sftpservice.update (sftpdto); }} // Release SFTP Resource Close (); }}Resumir
El anterior es el código de muestra para Java que usa SFTP para descargar archivos regularmente. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!