העברת קובץ באמצעות SFTP בג'אווה

1. סקירה כללית

במדריך זה, נדון כיצד להעלות ולהוריד קבצים משרת מרוחק באמצעות SFTP ב- Java.

נשתמש בשלוש ספריות שונות: JSch, SSHJ ו- Apache Commons VFS.

2. שימוש ב- JSch

ראשית, בואו נראה כיצד להעלות ולהוריד קבצים משרת מרוחק באמצעות ספריית JSch.

2.1. תצורת Maven

נצטרך להוסיף את jsch תלות שלנו pom.xml:

 com.jcraft jsch 0.1.55 

הגרסה האחרונה של jsch ניתן למצוא ב Maven Central.

2.2. הגדרת JSch

כעת, נגדיר את JSch.

JSch מאפשר לנו להשתמש באימות סיסמאות או באימות מפתח ציבורי כדי לגשת לשרת מרוחק. בדוגמה זו, נשתמש באימות סיסמה:

פרטי ChannelSftp setupJsch () זורק את JSchException {JSch jsch = JSch חדש (); jsch.setKnownHosts ("/ משתמשים / john / .ssh / known_hosts"); מושב jschSession = jsch.getSession (שם משתמש, remoteHost); jschSession.setPassword (סיסמה); jschSession.connect (); return (ChannelSftp) jschSession.openChannel ("sftp"); }

בדוגמה לעיל, remoteHost מייצג את השם או את כתובת ה- IP של השרת המרוחק (כלומר example.com). אנו יכולים להגדיר את המשתנים המשמשים במבחן כ:

מחרוזת פרטית remoteHost = "HOST_NAME_HERE"; שם משתמש פרטי מחרוזת = "USERNAME_HERE"; סיסמת מחרוזת פרטית = "PASSWORD_HERE";

כמו כן, אנו יכולים ליצור את ידועים_מארחים קובץ באמצעות הפקודה הבאה:

ssh-keyscan -H -t rsa REMOTE_HOSTNAME >> ידועים_מארחים

2.3. העלאת קובץ עם JSch

עַכשָׁיו, כדי להעלות קובץ לשרת המרוחק, נשתמש בשיטה ChannelSftp.put ():

@Test ציבורי בטל כאשר UploadFileUsingJsch_thenSuccess () זורק JSchException, SftpException {ChannelSftp channelSftp = setupJsch (); channelSftp.connect (); מחרוזת localFile = "src / main / resources / sample.txt"; מחרוזת remoteDir = "remote_sftp_test /"; channelSftp.put (localFile, remoteDir + "jschFile.txt"); channelSftp.exit (); }

בדוגמה זו, הפרמטר הראשון של השיטה מייצג את הקובץ המקומי שיועבר, למשל, src / main / resources / sample.txt, בזמן remoteDir הוא הנתיב של ספריית היעד בשרת המרוחק.

2.4. הורדת קובץ עם JSch

אנחנו יכולים גם להוריד קובץ מהשרת המרוחק באמצעות ChannelSftp.get ():

@ מבחן ציבורי בטל כאשרDownloadFileUsingJsch_thenSuccess () זורק JSchException, SftpException {ChannelSftp channelSftp = setupJsch (); channelSftp.connect (); מחרוזת remoteFile = "welcome.txt"; מחרוזת localDir = "src / main / resources /"; channelSftp.get (remoteFile, localDir + "jschFile.txt"); channelSftp.exit (); }

ה remoteFile הוא הנתיב של הקובץ להורדה, ו localDir מייצג את הנתיב של ספריית היעד המקומית:

3. שימוש ב- SSHJ

לאחר מכן נשתמש בספריית SSHJ להעלאת ולהורדת קבצים משרת מרוחק.

3.1. תצורת Maven

ראשית, נוסיף את התלות שלנו pom.xml:

 com.hierynomus sshj 0.27.0 

הגרסה האחרונה של sshj ניתן למצוא ב Maven Central.

3.2. הגדרת SSHJ

הַבָּא, נגדיר את SSHClient.

SSHJ גם מאפשר לנו להשתמש בסיסמה או אימות מפתח ציבורי כדי לגשת לשרת המרוחק.

נשתמש באימות סיסמאות בדוגמה שלנו:

פרטי SSHClient setupSshj () זורק IOException {לקוח SSHClient = SSHClient חדש (); client.addHostKeyVerifier (חדש PromiscuousVerifier ()); client.connect (remoteHost); client.authPassword (שם משתמש, סיסמה); לקוח חוזר; }

3.3. העלאת קובץ עם SSHJ

בדומה ל- JSch, נשתמש ב- SFTPClient.put () שיטה להעלאת קובץ לשרת המרוחק:

@ מבחן ציבורי בטל כאשר UploadFileUsingSshj_thenSuccess () זורק IOException {SSHClient sshClient = setupSshj (); SFTPClient sftpClient = sshClient.newSFTPClient (); sftpClient.put (localFile, remoteDir + "sshjFile.txt"); sftpClient.close (); sshClient.disconnect (); }

יש לנו שני משתנים חדשים להגדרה:

מחרוזת פרטית localFile = "src / main / resources / input.txt"; מחרוזת פרטית remoteDir = "remote_sftp_test /";

3.4. הורדת קובץ עם SSHJ

כנ"ל לגבי הורדת קובץ מהשרת המרוחק - נשתמש בו SFTPClient.get ():

@Test ציבורי בטל כאשרDownloadFileUsingSshj_thenSuccess () זורק IOException {SSHClient sshClient = setupSshj (); SFTPClient sftpClient = sshClient.newSFTPClient (); sftpClient.get (remoteFile, localDir + "sshjFile.txt"); sftpClient.close (); sshClient.disconnect (); }

ונוסיף את שני המשתנים המשמשים לעיל:

פרטי מחרוזת remoteFile = "welcome.txt"; מחרוזת פרטית localDir = "src / main / resources /";

4. שימוש ב- Apache Commons VFS

לבסוף, נשתמש ב- Apache Commons VFS להעברת קבצים לשרת מרוחק.

בעצם, Apache Commons VFS משתמש בספריית JSch באופן פנימי.

4.1. תצורת Maven

עלינו להוסיף את commons-vfs2 תלות שלנו pom.xml:

 org.apache.commons commons-vfs2 2.4 

הגרסה האחרונה של commons-vfs2 ניתן למצוא ב Maven Central.

4.2. העלאת קובץ עם Apache Commons VFS

Apache Commons VFS הוא קצת שונה.

נשתמש ב- FileSystemManager ליצור FileObjects מקבצי היעד שלנו, ואז השתמש ב- FileObjectלהעביר את הקבצים שלנו.

בדוגמה זו נעלה קובץ בשיטה FileObject.copyFrom ():

@Test ציבורי בטל כאשר UploadFileUsingVfs_thenSuccess () זורק IOException {מנהל FileSystemManager = VFS.getManager (); FileObject local = manager.resolveFile (System.getProperty ("user.dir") + "/" + localFile); FileObject מרחוק = manager.resolveFile ("sftp: //" + שם משתמש + ":" + סיסמה + "@" + remoteHost + "/" + remoteDir + "vfsFile.txt"); remote.copyFrom (מקומי, Selectors.SELECT_SELF); local.close (); remote.close (); }

שים לב שנתיב הקבצים המקומי צריך להיות מוחלט ונתיב הקבצים המרוחק צריך להתחיל איתו sftp: // שם משתמש: [מוגן בדוא"ל]

4.3. הורדת קובץ עם Apache Commons VFS

הורדת קובץ משרת מרוחק דומה מאוד - נשתמש גם FileObject.copyFrom () להעתיק localFile מ remoteFile:

@Test ציבורי בטל כאשרDownloadFileUsingVfs_thenSuccess () זורק IOException {מנהל FileSystemManager = VFS.getManager (); FileObject local = manager.resolveFile (System.getProperty ("user.dir") + "/" + localDir + "vfsFile.txt"); FileObject remote = manager.resolveFile ("sftp: //" + שם משתמש + ":" + סיסמא + "@" + remoteHost + "/" + remoteFile); local.copyFrom (מרחוק, Selectors.SELECT_SELF); local.close (); remote.close (); }

5. מסקנה

במאמר זה למדנו כיצד להעלות ולהוריד קבצים משרת SFTP מרוחק ב- Java. לשם כך השתמשנו במספר ספריות: JSch, SSHJ ו- Apache Commons VFS.

קוד המקור המלא ניתן למצוא באתר GitHub.


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