Overførsel af en fil via SFTP i Java

1. Oversigt

I denne vejledning vi diskuterer, hvordan man uploader og downloader filer fra en ekstern server ved hjælp af SFTP i Java.

Vi bruger tre forskellige biblioteker: JSch, SSHJ og Apache Commons VFS.

2. Brug af JSch

Lad os først se, hvordan du uploader og downloader filer fra en ekstern server ved hjælp af JSch-biblioteket.

2.1. Maven-konfiguration

Vi bliver nødt til at tilføje jsch afhængighed af vores pom.xml:

 com.jcraft jsch 0.1.55 

Den seneste version af jsch kan findes på Maven Central.

2.2. Opsætning af JSch

Nu opretter vi JSch.

JSch giver os mulighed for at bruge enten adgangskodegodkendelse eller godkendelse af offentlig nøgle til at få adgang til en ekstern server. I dette eksempel vi bruger adgangskodegodkendelse:

privat ChannelSftp setupJsch () kaster JSchException {JSch jsch = ny JSch (); jsch.setKnownHosts ("/ Brugere / john / .ssh / kendt_hosts"); Session jschSession = jsch.getSession (brugernavn, remoteHost); jschSession.setPassword (adgangskode); jschSession.connect (); returnere (ChannelSftp) jschSession.openChannel ("sftp"); }

I eksemplet ovenfor er remoteHost repræsenterer navnet eller IP-adressen på den eksterne server (dvs. eksempel.com). Vi kan definere de variabler, der bruges i testen som:

private String remoteHost = "HOST_NAME_HERE"; privat streng brugernavn = "USERNAME_HERE"; privat strengadgangskode = "PASSWORD_HERE";

Vi kan også generere kendt_hosts fil ved hjælp af følgende kommando:

ssh-keyscan -H -t rsa REMOTE_HOSTNAME >> kendte_hosts

2.3. Uploade en fil med JSch

Nu, For at uploade en fil til fjernserveren bruger vi metoden ChannelSftp.put ():

@Test offentlig ugyldig, nårUploadFileUsingJsch_thenSuccess () kaster JSchException, SftpException {ChannelSftp channelSftp = setupJsch (); channelSftp.connect (); Streng localFile = "src / main / resources / sample.txt"; Streng remoteDir = "remote_sftp_test /"; channelSftp.put (localFile, remoteDir + "jschFile.txt"); channelSftp.exit (); }

I dette eksempel repræsenterer den første parameter for metoden den lokale fil, der skal overføres, for eksempel src / main / resources / sample.txt, mens remoteDir er stien til målkataloget på den eksterne server.

2.4. Download af en fil med JSch

Det kan vi også downloade en fil fra den eksterne server ved hjælp af ChannelSftp.get ():

@Test offentlig ugyldig nårDownloadFileUsingJsch_thenSuccess () kaster JSchException, SftpException {ChannelSftp channelSftp = setupJsch (); channelSftp.connect (); String remoteFile = "velkommen.txt"; String localDir = "src / main / resources /"; channelSftp.get (remoteFile, localDir + "jschFile.txt"); channelSftp.exit (); }

Det remoteFile er stien til den fil, der skal downloades, og localDir repræsenterer stien til det lokale målkatalog:

3. Brug af SSHJ

Dernæst bruger vi SSHJ-biblioteket til at uploade og downloade filer fra en ekstern server.

3.1. Maven-konfiguration

Først tilføjer vi afhængigheden af ​​vores pom.xml:

 com.hierynomus sshj 0.27.0 

Den seneste version af sshj kan findes på Maven Central.

3.2. Opsætning af SSHJ

Næste, vi opretter SSH-klient.

SSHJ giver os også mulighed for at bruge adgangskode eller offentlig nøgleautentificering til at få adgang til fjernserveren.

Vi bruger adgangskodegodkendelse i vores eksempel:

privat SSHClient setupSshj () kaster IOException {SSHClient-klient = ny SSHClient (); client.addHostKeyVerifier (ny PromiscuousVerifier ()); client.connect (remoteHost); client.authPassword (brugernavn, adgangskode); tilbagevendende klient; }

3.3. Uploade en fil med SSHJ

Svarende til JSch, vi bruger SFTPClient.put () metode til at uploade en fil til fjernserveren:

@Test offentlig ugyldig, nårUploadFileUsingSshj_thenSuccess () kaster IOException {SSHClient sshClient = setupSshj (); SFTPClient sftpClient = sshClient.newSFTPClient (); sftpClient.put (localFile, remoteDir + "sshjFile.txt"); sftpClient.close (); sshClient.disconnect (); }

Vi har to nye variabler her til at definere:

privat streng localFile = "src / main / resources / input.txt"; private String remoteDir = "remote_sftp_test /";

3.4. Download af en fil med SSHJ

Det samme gælder for download af en fil fra fjernserveren - vi bruger det SFTPClient.get ():

@Test offentlig ugyldig nårDownloadFileUsingSshj_thenSuccess () kaster IOException {SSHClient sshClient = setupSshj (); SFTPClient sftpClient = sshClient.newSFTPClient (); sftpClient.get (remoteFile, localDir + "sshjFile.txt"); sftpClient.close (); sshClient.disconnect (); }

Og lad os tilføje de to variabler, der er brugt ovenfor:

private String remoteFile = "welcome.txt"; private String localDir = "src / main / resources /";

4. Brug af Apache Commons VFS

Endelig bruger vi Apache Commons VFS til at overføre filer til en ekstern server.

Rent faktisk, Apache Commons VFS bruger JSch-biblioteket internt.

4.1. Maven-konfiguration

Vi er nødt til at tilføje commons-vfs2 afhængighed af vores pom.xml:

 org.apache.commons commons-vfs2 2.4 

Den seneste version af commons-vfs2 kan findes på Maven Central.

4.2. Uploade en fil med Apache Commons VFS

Apache Commons VFS er lidt anderledes.

Vi bruger en FileSystemManager at skabe FileObjects fra vores målfiler, og brug derefter FileObjects for at overføre vores filer.

I dette eksempel uploader vi en fil ved hjælp af metoden FileObject.copyFrom ():

@Test offentlig ugyldig nårUploadFileUsingVfs_thenSuccess () kaster IOException {FileSystemManager manager = VFS.getManager (); FileObject local = manager.resolveFile (System.getProperty ("user.dir") + "/" + localFile); FileObject remote = manager.resolveFile ("sftp: //" + brugernavn + ":" + adgangskode + "@" + remoteHost + "/" + remoteDir + "vfsFile.txt"); remote.copyFrom (lokal, Selectors.SELECT_SELF); local.close (); remote.close (); }

Bemærk, at den lokale filsti skal være absolut, og den eksterne filsti skal starte med sftp: // brugernavn: [email protected]

4.3. Download af en fil med Apache Commons VFS

Downloading af en fil fra en ekstern server er meget ens - vi bruger også FileObject.copyFrom () at kopiere localFile fra remoteFile:

@Test offentlig ugyldig nårDownloadFileUsingVfs_thenSuccess () kaster IOException {FileSystemManager manager = VFS.getManager (); FileObject local = manager.resolveFile (System.getProperty ("user.dir") + "/" + localDir + "vfsFile.txt"); FileObject remote = manager.resolveFile ("sftp: //" + brugernavn + ":" + adgangskode + "@" + remoteHost + "/" + remoteFile); local.copyFrom (fjernbetjening, Selectors.SELECT_SELF); local.close (); remote.close (); }

5. Konklusion

I denne artikel lærte vi, hvordan man uploader og downloader filer fra en ekstern SFTP-server i Java. Til dette brugte vi flere biblioteker: JSch, SSHJ og Apache Commons VFS.

Den fulde kildekode kan findes på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found