Prenos súboru cez SFTP v Jave

1. Prehľad

V tomto návode budeme diskutovať o tom, ako nahrávať a sťahovať súbory zo vzdialeného servera pomocou SFTP v Jave.

Budeme používať tri rôzne knižnice: JSch, SSHJ a Apache Commons VFS.

2. Používanie JSch

Najprv sa pozrime, ako nahrávať a sťahovať súbory zo vzdialeného servera pomocou knižnice JSch.

2.1. Konfigurácia Maven

Budeme musieť pridať jsch závislosť na našom pom.xml:

 com.jcraft jsch 0.1.55 

Najnovšia verzia servera jsch nájdete na Maven Central.

2.2. Nastavenie JSch

Teraz nastavíme JSch.

JSch nám umožňuje používať na overenie prístupu na vzdialený server buď overenie pomocou hesla, alebo overenie pomocou verejného kľúča. V tomto príklade použijeme autentifikáciu pomocou hesla:

private ChannelSftp setupJsch () hodí JSchException {JSch jsch = nový JSch (); jsch.setKnownHosts ("/ Users / john / .ssh / known_hosts"); Relácia jschSession = jsch.getSession (používateľské meno, remoteHost); jschSession.setPassword (heslo); jschSession.connect (); return (ChannelSftp) jschSession.openChannel ("sftp"); }

Vo vyššie uvedenom príklade je vzdialený hostiteľ predstavuje meno alebo IP adresu vzdialeného servera (t.j. example.com). Premenné použité v teste môžeme definovať ako:

private String remoteHost = "HOST_NAME_HERE"; private String username = "USERNAME_HERE"; heslo súkromného reťazca = "PASSWORD_HERE";

Môžeme tiež vygenerovať známi_hostitelia pomocou nasledujúceho príkazu:

ssh-keyscan -H -t rsa REMOTE_HOSTNAME >> známe_hostitelia

2.3. Nahrávanie súboru pomocou JSch

Teraz, na nahranie súboru na vzdialený server použijeme túto metódu ChannelSftp.put ():

@ Test public void whenUploadFileUsingJsch_thenSuccess () vyvolá JSchException, SftpException {ChannelSftp channelSftp = setupJsch (); channelSftp.connect (); Reťazec localFile = "src / main / resources / sample.txt"; Reťazec remoteDir = "remote_sftp_test /"; channelSftp.put (localFile, remoteDir + "jschFile.txt"); channelSftp.exit (); }

V tomto príklade predstavuje prvý parameter metódy lokálny súbor, ktorý sa má preniesť, napríklad src / main / resources / sample.txt, zatiaľ čo remoteDir je cesta cieľového adresára na vzdialenom serveri.

2.4. Stiahnutie súboru pomocou JSch

Môžeme tiež stiahnuť súbor zo vzdialeného servera pomocou ChannelSftp.get ():

@ Test public void whenDownloadFileUsingJsch_thenSuccess () hodí JSchException, SftpException {ChannelSftp channelSftp = setupJsch (); channelSftp.connect (); Reťazec remoteFile = "welcome.txt"; Reťazec localDir = "src / main / resources /"; channelSftp.get (remoteFile, localDir + "jschFile.txt"); channelSftp.exit (); }

The remoteFile je cesta k súboru, ktorý sa má stiahnuť, a - localDir predstavuje cestu cieľového lokálneho adresára:

3. Používanie SSHJ

Ďalej použijeme knižnicu SSHJ na nahrávanie a sťahovanie súborov zo vzdialeného servera.

3.1. Konfigurácia Maven

Najskôr pridáme závislosť do našej pom.xml:

 com.hierynomus sshj 0.27.0 

Najnovšia verzia servera sshj nájdete na Maven Central.

3.2. Nastavenie SSHJ

Ďalšie, nastavíme SSHClient.

SSHJ nám tiež umožňuje používať na prístup na vzdialený server heslo alebo autentifikáciu pomocou verejného kľúča.

V našom príklade použijeme overenie hesla:

private SSHClient setupSshj () vyvolá IOException {SSHClient client = new SSHClient (); client.addHostKeyVerifier (nový PromiscuousVerifier ()); client.connect (remoteHost); client.authPassword (používateľské meno, heslo); návratný klient; }

3.3. Nahrávanie súboru pomocou SSHJ

Podobné JSch, použijeme SFTPClient.put () metóda na upload súboru na vzdialený server:

@ Test public void whenUploadFileUsingSshj_thenSuccess () vyvolá IOException {SSHClient sshClient = setupSshj (); SFTPClient sftpClient = sshClient.newSFTPClient (); sftpClient.put (localFile, remoteDir + "sshjFile.txt"); sftpClient.close (); sshClient.disconnect (); }

Na definovanie máme dve nové premenné:

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

3.4. Stiahnutie súboru pomocou SSHJ

To isté platí pre sťahovanie súboru zo vzdialeného servera - použijeme SFTPClient.get ():

@ Test public void whenDownloadFileUsingSshj_thenSuccess () vyvolá IOException {SSHClient sshClient = setupSshj (); SFTPClient sftpClient = sshClient.newSFTPClient (); sftpClient.get (remoteFile, localDir + "sshjFile.txt"); sftpClient.close (); sshClient.disconnect (); }

A pridajme dve použité premenné vyššie:

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

4. Používanie Apache Commons VFS

Nakoniec použijeme Apache Commons VFS na prenos súborov na vzdialený server.

Vlastne, Apache Commons VFS interne používa knižnicu JSch.

4.1. Konfigurácia Maven

Musíme pridať commons-vfs2 závislosť na našom pom.xml:

 org.apache.commons commons-vfs2 2.4 

Najnovšia verzia servera commons-vfs2 nájdete na Maven Central.

4.2. Nahrávanie súboru pomocou Apache Commons VFS

Apache Commons VFS je trochu iný.

Použijeme a FileSystemManager tvoriť FileObjects z našich cieľových súborov, potom použite FileObjects na prenos našich súborov.

V tomto príklade nahráme súbor pomocou metódy FileObject.copyFrom ():

@ Test public void whenUploadFileUsingVfs_thenSuccess () vyvolá IOException {FileSystemManager manager = VFS.getManager (); FileObject local = manager.resolveFile (System.getProperty ("user.dir") + "/" + localFile); FileObject remote = manager.resolveFile ("sftp: //" + username + ":" + heslo + "@" + remoteHost + "/" + remoteDir + "vfsFile.txt"); remote.copyFrom (local, Selectors.SELECT_SELF); local.close (); remote.close (); }

Cesta lokálneho súboru by mala byť absolútna a cesta vzdialeného súboru by mala začínať znakom sftp: // používateľské meno: [chránené e-mailom]

4.3. Stiahnutie súboru pomocou Apache Commons VFS

Sťahovanie súboru zo vzdialeného servera je veľmi podobné - tiež použijeme FileObject.copyFrom () kopírovať localFile od remoteFile:

@Test public void whenDownloadFileUsingVfs_thenSuccess () vyvolá IOException {FileSystemManager manager = VFS.getManager (); FileObject local = manager.resolveFile (System.getProperty ("user.dir") + "/" + localDir + "vfsFile.txt"); FileObject remote = manager.resolveFile ("sftp: //" + username + ":" + heslo + "@" + remoteHost + "/" + remoteFile); local.copyFrom (remote, Selectors.SELECT_SELF); local.close (); remote.close (); }

5. Záver

V tomto článku sme sa naučili, ako nahrávať a sťahovať súbory zo vzdialeného servera SFTP v prostredí Java. Na tento účel sme použili viac knižníc: JSch, SSHJ a Apache Commons VFS.

Celý zdrojový kód nájdete na GitHub.


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