Introduction à SFTP
SFTP est l'abréviation du protocole de transfert de fichiers sécurisé, un protocole de transfert de fichiers sécurisé. Une méthode de chiffrement réseau sécurisée peut être fournie pour le transfert de fichiers. SFTP a presque la même syntaxe et les mêmes fonctions que FTP. SFTP fait partie de SSH et est un moyen sécurisé de transférer des fichiers vers un serveur de blogueur. En fait, dans le package SSH, un sous-système de transfert d'informations de fichiers sécurisé appelé SFTP (protocole de transfert de fichiers sécurisé) est déjà inclus. SFTP lui-même n'a pas de démon séparé. Il doit utiliser le démon SSHD (le numéro de port est 22 par défaut) pour terminer les opérations de connexion et de réponse correspondantes. Par conséquent, dans un sens, SFTP n'est pas comme un programme de serveur, mais plus comme un programme client. SFTP utilise également le cryptage pour transmettre des informations d'authentification et des données transmises, il est donc très sûr d'utiliser SFTP. Cependant, comme cette méthode de transmission utilise une technologie de chiffrement / décryptage, l'efficacité de transmission est beaucoup plus faible que celle du FTP ordinaire. Si vous avez des exigences de sécurité réseau plus élevées, vous pouvez utiliser SFTP au lieu de FTP.
Ajouter des dépendances
<dependency> <proupId> com.jcraft </prouprid> <letfactId> jsch </ artifactId> <version> 0.1.54 </-version> </Dependency>
Ajouter une configuration
SFTP: IP: 192.168.1.60 Port: 22 Timeout: 60000 Retrytime: 3 Admin: Nom d'utilisateur: Mot de passe d'administration: 2k3xryjbd930.
Exemple de code
Téléchargez chaque jour des fichiers CSV dans plusieurs répertoires d'utilisateurs à 1 h
@ServicePublic Classe SFTPTASK étend Thread {private canauxftp sftp; Session privée; @Value ("$ {sftp.admin.username}") Private String Username; @Value ("$ {sftp.admin.password}") Mot de passe de chaîne privée; @Value ("$ {sftp.host}") Hôte de chaîne privée; @Value ("$ {sftp.port}") Port entier privé; SFTPSSERVICE privé SFTPSSERVICE; public EtlsftPtask (sftPService sftPService) {this.sftPService = sftPService; } / ** * Établir une connexion SFTP * / private void connect () {try {jsch jsch = new JSCH (); session = jsch.getSession (nom d'utilisateur, hôte, port); session.setpassword (mot de passe); session.setConfig ("stricThostKeyChecking", "non"); session.connect (); Channel Channel = Session.Opennannel ("SFTP"); canal.connect (); canal sftp = (canauxftp); } catch (jschexception e) {e.printStackTrace (); }} / ** * Close Sftp Connection * / 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 (); }} / ** * Téléchargez le fichier vers le fichier source de source local * @param * @param Fichier cible cible * @throws sftpexception exception * @throws filenotfoundException exception * / private void download (string source, string target) lance sftPException, filenotfoundException {sftp.get (source, new FileAutStream (nouveau fichier (cible)); } / ** * Traitement des fichiers de données utilisateur * * @Param Root Data Fichier Root Directory * @param La dernière fois lorsque le dernier fichier a été traité * @return la dernière fois de traitement du fichier * / Private Integer Handle (String root, Integer Lasttime) {String Directory = root + "/ event /"; Fichiers vectoriels; essayez {fichiers = sftp.ls (répertoire + "événement _ *. CSV"); } catch (exception e) {e.printStackTrace (); retour 0; } // Nom de fichier String FileName; // chaîne de fichiers temporaire tmpFile; // Mise à jour du fichier entier mtime; // Fichier Last Update Time Integer maxtime = Lasttime; // Processus des fichiers utilisateur pour (objet o: fichiers) {try {channelsftp.lSentry f = (channelsftp.lSentry) o; // Mise à jour du fichier mTime = f.getattrs (). Getmtime (); si (mtime <= dernier) continue; // Nom de fichier filename = f.getFileName (); // le dernier processus événement maxtime = math.max (maxtime, mtime); // Télécharger le fichier tmpfile = "/ tmp /" + nom de fichier; Télécharger (répertoire + nom de fichier, tmpFile); } catch (exception e) {// Todo Error Log e.printStackTrace (); }} // renvoie le dernier temps de traitement du fichier return maxtime; } / ** * L'exécution commence à 1 h. Tous les jours * / @scheduled (cron = "0 0 1 * * *") public void task () {// get sftp connect connect (); String root; Entier dernier; CID long; Entier maxtime = dernier; // Obtenez la liste d'utilisateurs pour (sftpdto sftpdto: sftPService.Findall ()) {// User Home Directory root = sftpdto.getsftproot (); // Dernière fois du dernier traitement de fichiers Lasttime = sftpdto.getLastTime (); maxtime = math.max (maxtime, handle (root, dernier)); // Mette à jour le dernier temps de traitement if (! Maxtime.equals (dernier)) {sftpdto.setLastTime (maxtime); sftPService.update (sftpdto); }} // libérer la ressource SFTP Close (); }}Résumer
Ce qui précède est l'exemple de code pour Java utilisant SFTP pour télécharger des fichiers régulièrement. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!