Overføre en fil gjennom SFTP i Java

1. Oversikt

I denne veiledningen, vi diskuterer hvordan du laster opp og laster ned filer fra en ekstern server ved hjelp av SFTP i Java.

Vi bruker tre forskjellige biblioteker: JSch, SSHJ og Apache Commons VFS.

2. Bruke JSch

La oss først se hvordan du laster opp og laster ned filer fra en ekstern server ved hjelp av JSch-biblioteket.

2.1. Maven-konfigurasjon

Vi må legge til jsch avhengighet til vår pom.xml:

 com.jcraft jsch 0.1.55 

Den siste versjonen av jsch kan du finne på Maven Central.

2.2. Sette opp JSch

Nå setter vi opp JSch.

JSch lar oss bruke enten passordgodkjenning eller offentlig nøkkelgodkjenning for å få tilgang til en ekstern server. I dette eksemplet, vi bruker passordgodkjenning:

privat ChannelSftp setupJsch () kaster JSchException {JSch jsch = ny JSch (); jsch.setKnownHosts ("/ Brukere / john / .ssh / kjent_hosts"); Session jschSession = jsch.getSession (brukernavn, remoteHost); jschSession.setPassword (passord); jschSession.connect (); return (ChannelSftp) jschSession.openChannel ("sftp"); }

I eksemplet ovenfor er remoteHost representerer navnet eller IP-adressen til den eksterne serveren (dvs. eksempel.com). Vi kan definere variablene som brukes i testen som:

private String remoteHost = "HOST_NAME_HERE"; privat streng brukernavn = "USERNAME_HERE"; privat strengpassord = "PASSWORD_HERE";

Vi kan også generere kjent_hosts filen ved hjelp av følgende kommando:

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

2.3. Laste opp en fil med JSch

Nå, For å laste opp en fil til den eksterne serveren, bruker 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 eksemplet representerer den første parameteren for metoden den lokale filen som skal overføres, for eksempel src / main / resources / sample.txt, samtidig som eksternDir er banen til målkatalogen på den eksterne serveren.

2.4. Laste ned en fil med JSch

Vi kan også laste ned en fil fra den eksterne serveren ved hjelp av ChannelSftp.get ():

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

De remoteFile er banen til filen som skal lastes ned, og localDir representerer banen til den lokale katalogen:

3. Bruke SSHJ

Deretter bruker vi SSHJ-biblioteket til å laste opp og laste ned filer fra en ekstern server.

3.1. Maven-konfigurasjon

Først vil vi legge til avhengighet til vår pom.xml:

 com.hierynomus sshj 0.27.0 

Den siste versjonen av sshj kan du finne på Maven Central.

3.2. Sette opp SSHJ

Neste, vi setter opp SSH-klient.

SSHJ lar oss også bruke passord eller offentlig nøkkelgodkjenning for å få tilgang til den eksterne serveren.

Vi bruker passordautentisering i vårt eksempel:

privat SSHClient setupSshj () kaster IOException {SSHClient-klient = ny SSHClient (); client.addHostKeyVerifier (ny PromiscuousVerifier ()); client.connect (remoteHost); client.authPassword (brukernavn, passord); retur klient; }

3.3. Laste opp en fil med SSHJ

I likhet med JSch, vi bruker SFTPClient.put () metode for å laste opp en fil til den eksterne serveren:

@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 å definere:

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

3.4. Laste ned en fil med SSHJ

Det samme gjelder nedlasting av en fil fra den eksterne serveren - vi bruker 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 la oss legge til de to variablene som brukes ovenfor:

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

4. Bruke Apache Commons VFS

Til slutt bruker vi Apache Commons VFS til å overføre filer til en ekstern server.

Faktisk, Apache Commons VFS bruker JSch-biblioteket internt.

4.1. Maven-konfigurasjon

Vi må legge til commons-vfs2 avhengighet til vår pom.xml:

 org.apache.commons commons-vfs2 2.4 

Den siste versjonen av commons-vfs2 kan du finne på Maven Central.

4.2. Laste opp en fil med Apache Commons VFS

Apache Commons VFS er litt annerledes.

Vi bruker en FileSystemManager å lage FileObjects fra målfilene våre, og bruk deretter FileObjects for å overføre filene våre.

I dette eksemplet vil vi laste opp en fil ved hjelp av 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: //" + brukernavn + ":" + passord + "@" + remoteHost + "/" + remoteDir + "vfsFile.txt"); remote.copyFrom (lokal, Selectors.SELECT_SELF); local.close (); remote.close (); }

Merk at den lokale filstien skal være absolutt, og den eksterne filstien skal begynne med sftp: // brukernavn: [e-postbeskyttet]

4.3. Laste ned en fil med Apache Commons VFS

Nedlasting av en fil fra en ekstern server er veldig lik - vi vil også bruke FileObject.copyFrom () å 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: //" + brukernavn + ":" + passord + "@" + remoteHost + "/" + remoteFile); local.copyFrom (ekstern, Selectors.SELECT_SELF); local.close (); remote.close (); }

5. Konklusjon

I denne artikkelen lærte vi hvordan du laster opp og laster ned filer fra en ekstern SFTP-server i Java. For dette brukte vi flere biblioteker: JSch, SSHJ og Apache Commons VFS.

Hele kildekoden finner du på GitHub.


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