Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Boot Java Discussion :

comment téléverser un fichier en sftp ?


Sujet :

Spring Boot Java

  1. #1
    Membre confirmé
    comment téléverser un fichier en sftp ?
    Bonjour,

    je souhaite uploader un fichier sur une autre machine

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    [machine NAS:192.168.0.10] (ftp) <= [machine spring boot maven:192.168.1.20]


    ma machine nas est prête, avec filezilla, j'arrive à me connecté avec mon login et mot de passe en sftp.

    dans ce lien il indique la configuration "sftp factory session".

    https://docs.spring.io/spring-integr...html/sftp.html

    où doit t'on mettre ce fichier xml ? directement dans pom.xml ?
    Code XML :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <beans:bean id="sftpSessionFactory"
        class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory">
        <beans:property name="springboot" value="192.168.1.10"/>
        <beans:property name="privateKey" value="classpath<img src="images/smilies/icon_biggrin.gif" border="0" alt="" title=":D" class="inlineimg" />:\spring-boot\sftp\src\main\resources\ssl-toto.jks"/>
        <beans:property name="privateKeyPassphrase" value="springIntegration"/>
        <beans:property name="port" value="22"/>
        <beans:property name="user" value="nas"/>
    </beans:bean>

    Avant de mettre ce fichier, il y a t'il autre chose à préparer avant ?
    je peux utiliser la clef auto-signer du ssl ?
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    # keytool -genkey -alias ssl-toto -storetype JKS -keyalg RSA -keysize 2048 -validity 365 -keystore ssl-toto.jks
    server.ssl.key-alias=ssl-toto
    server.ssl.key-store-type=JKS
    server.ssl.key-password=mdptoto
    server.ssl.key-store=classpath:ssl-toto.jks


    merci de votre réponse

  2. ###raw>post.musername###
    Membre confirmé
    Finalement j'ai trouvé un plugin qui fonctionne assez bien:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    	private String localFile = "C:\\xampp\\htdocs\\dashboard\\images\\capture.JPG";
    	private String remoteDir = "/www/test/";//serveur externe sftp
     
    	private SSHClient setupSshj() throws IOException {
    		SSHClient client = new SSHClient();
    		client.addHostKeyVerifier(new PromiscuousVerifier());
    		client.connect("192.168.1.2");
    		client.authPassword("test","test");
    		System.out.println(client);
    		return client;
    	}
     
    	  public void whenUploadFileUsingSshj_thenSuccess() throws IOException {
    		SSHClient sshClient = setupSshj();
    		SFTPClient sftpClient = sshClient.newSFTPClient();
     
    		//sftpClient.put(localFile, remoteDir + "creationdossier"); //le paramètre creation dossier créer un nouveau dossier
    		sftpClient.put(localFile, remoteDir); //pas de 3eme paramètre il récupère tout ce qu'il y a dans localfile et mets les fichier dans remote dir
    		sftpClient.close();
    		sshClient.disconnect();
    	}
      0  0

  3. #3
    Membre extrêmement actif
    Citation Envoyé par keokaz Voir le message


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    [machine NAS:192.168.0.10] (ftp) <= [machine spring boot maven:192.168.1.20]


    ma machine nas est prête, avec filezilla, j'arrive à me connecté avec mon login et mot de passe en sftp.

    dans ce lien il indique la configuration "sftp factory session".

    https://docs.spring.io/spring-integr...html/sftp.html
    Ce document explique la configuration d'un bean spring gérant le sftp, donc au sein de l'application. Et non pas lors de sa compilation ou de son deploiement.

    Comme tu évoques le pom.xml, on en conclut que tu utilises maven pour ces deux phases auquel cas il te faut regarder de ce coté :
    https://maven.apache.org/plugins/mav...-external.html

    Puis une fois ton pom.xml modifié, invoquer mvn deploy. Sans oublier de toujours t'assurer disposer d'un archive des différentes versions déployées, pour pouvoir faire un rollback si nécessaire (ce qui arrive toujours).

    PS: écris plutôt [machine spring boot maven:192.168.1.20] => [machine NAS:192.168.0.10] (ftp), source vers destinataire, sinon ton lecteur risque de faire une confusion.
    La joie de l'âme est dans la planification -- Louis Hubert Liautey

  4. #4
    Membre confirmé
    Merci pour ces précision, par contre j'ai fais un tas de test , la première fois que je demande de copier le fichier ,cela fonctionne bien, mais quand je redemande de nouveau de faire un autre fichier, il met quelque fois plus de 3 minutes .

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
     
    	private SSHClient setupSshj() throws IOException {
    		SSHClient client = new SSHClient();
    		client.addHostKeyVerifier(new PromiscuousVerifier());
    		client.connect("192.168.1.2");
    		client.authPassword(....
    		System.out.println(client+"<====");
    		return client;
    	}
     
    	  public void whenUploadFileUsingSshj_thenSuccess() throws IOException {
    	  	System.out.println("****4 en cours de copie ....");
    		SSHClient sshClient = setupSshj();
    		SFTPClient sftpClient = sshClient.newSFTPClient();
    	  		System.out.println("*****> connection sftp");
    		//sftpClient.put(localFile, remoteDir + "creationdossier"); //le paramètre creation dossier créer un nouveau dossier
    		sftpClient.put(localFile, remoteDir); //pas de 3eme paramètre il récupère tout ce qu'il y a dans localfile et mets les fichier dans remote dir
    		sftpClient.close();
    		System.out.println("*****> deconnextion depot");		
    		sshClient.disconnect();
    		System.out.println("*****5 depot de fichier sur une autre machine");
    	}


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ****4 en cours de copie ....
    2020-02-21 08:46:08.213  INFO 14460 --- [nio-8181-exec-4] n.s.s.t.random.BouncyCastleRandom        : Generating random seed from SecureRandom.
     
     
     
     
    2020-02-21 08:50:12.110  INFO 14460 --- [nio-8181-exec-4] n.schmizz.sshj.transport.TransportImpl   : Client identity string: SSH-2.0-SSHJ_0.27.0
    2020-02-21 08:50:12.178  INFO 14460 --- [nio-8181-exec-4] n.schmizz.sshj.transport.TransportImpl   : Server identity string: SSH-2.0-OpenSSH_7.9p1 Debian-10+deb10u1
    net.schmizz.sshj.SSHClient@7d991ada<====


    ici j'ai du attendre 4 minutes (08:46 à 08:50).
    C'est normal que c'est aussi lent (les machines sont dans le même réseaux)? peut être que d'ouvrir et fermer le ftp tout de suite n'est pas une bonne pratique ? ou qu'il faut configurer quelque chose (ici le problème c'est la machine 192.168.1.2 qui pose problème )?
    si je prend un autre plugin ça sera la même chose ?

    edit:

    J'ai essayer de voir qui est la cause de cette lenteur:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     
    //au moment ou je valide l'envoie d'un fichier:
    date d'envoie :Fri Feb 21 2020 08:59:49 GMT+0100 (heure normale d’Europe centrale)


    côté spring boot , j'obtient la connexion à 10h01
    Code console :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    2020-02-21 10:01:20.041  INFO 14460 --- [nio-8181-exec-3] n.schmizz.sshj.transport.TransportImp
    net.schmizz.sshj.SSHClient@75619bdd<====


    côté serveur il recoit la demande sftp à

    Code console :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Feb 21 10:01:20 accueil sshd[13993]: Accepted password for test from 192.168.1.2 port 41650 ssh2
    Feb 21 10:01:20 accueil sshd[13993]: pam_unix(sshd:session): session opened for user test by (uid=0)
    Feb 21 10:01:20 accueil systemd-logind[243]: New session 897 of user test.
    Feb 21 10:01:20 accueil systemd: pam_unix(systemd-user:session): session opened for user test by (uid=0)
    Feb 21 10:01:21 accueil sshd[14006]: Received disconnect from 192.168.1.2 port 41650:11: 
    Feb 21 10:01:21 accueil sshd[14006]: Disconnected from user test 192.168.1.2 port 41650
    Feb 21 10:01:21 accueil sshd[13993]: pam_unix(sshd:session): session closed for user test
    Feb 21 10:01:21 accueil systemd-logind[243]: Session 897 logged out. Waiting for processes to exit.      
    Feb 21 10:01:21 accueil systemd-logind[243]: Removed session 897.
    Feb 21 10:01:31 accueil systemd: pam_unix(systemd-user:session): session closed for user test


    à la deuxième demande de dépot de fichier, c'est à cause de spring-boot qui met du temps à se connecter en sftp ?