Pengantar SFTP
SFTP adalah singkatan dari protokol transfer file aman, protokol transfer file yang aman. Metode enkripsi jaringan yang aman dapat disediakan untuk mentransfer file. SFTP memiliki sintaks dan fungsi yang hampir sama dengan FTP. SFTP adalah bagian dari SSH dan merupakan cara yang aman untuk mentransfer file ke server blogger. Faktanya, dalam paket SSH, subsistem transfer informasi yang aman yang disebut SFTP (Protokol Transfer File Aman) sudah termasuk. SFTP itu sendiri tidak memiliki daemon terpisah. Itu harus menggunakan daemon SSHD (nomor port adalah 22 secara default) untuk menyelesaikan koneksi dan operasi balasan yang sesuai. Oleh karena itu, dalam arti tertentu, SFTP tidak seperti program server, tetapi lebih seperti program klien. SFTP juga menggunakan enkripsi untuk mengirimkan informasi otentikasi dan data yang ditransmisikan, sehingga sangat aman untuk menggunakan SFTP. Namun, karena metode transmisi ini menggunakan teknologi enkripsi/dekripsi, efisiensi transmisi jauh lebih rendah daripada FTP biasa. Jika Anda memiliki persyaratan keamanan jaringan yang lebih tinggi, Anda dapat menggunakan SFTP bukan FTP.
Tambahkan dependensi
<dependency> <GroupId> com.jcraft </groupid> <ArTifactId> jsch </artifactid> <version> 0.1.54 </version> </dependency>
Tambahkan Konfigurasi
SFTP: IP: 192.168.1.60 Port: 22 Timeout: 60000 Retrytime: 3 Admin: Nama Pengguna: Admin Kata Sandi: 2K3XryJBD930.
Contoh Kode
Unduh file CSV di beberapa direktori pengguna pada pukul 1 pagi setiap hari ke direktori TMP lokal
@Servicepublic Sftptask memperluas thread {private channelsftp sftp; sesi sesi pribadi; @Value ("$ {sftp.admin.username}") Private String username; @Value ("$ {sftp.admin.password}") kata sandi string pribadi; @Value ("$ {sftp.host}") host string pribadi; @Value ("$ {sftp.port}") port integer pribadi; sftpservice sftpservice pribadi; Etlsftptask publik (sftpservice sftpservice) {this.sftpservice = sftpservice; } / *** Tetapkan koneksi sftp* / private void connect () {coba {jsch jsch = new jsch (); session = jsch.getSession (nama pengguna, host, port); session.setPassword (kata sandi); session.setConfig ("StricthostKeyChecking", "no"); session.connect (); Saluran saluran = session.openchannel ("sftp"); channel.connect (); saluran sftp = (channelsftp); } catch (JSChException e) {E.PrintStackTrace (); }} / *** Tutup koneksi sftp* / public void tutup () {coba {if (sftp! = Null) {if (sftp.isconnected ()) sftp.disconnect (); } if (session! = null) {if (session.isconnected ()) session.disconnect (); }} catch (Exception e) {e.printstacktrace (); } } /** * Download the file to local * * @param source source file * @param target target file * @throws SftpException Exception * @throws FileNotFoundException Exception */ private void download(String source, String target) throws SftpException, FileNotFoundException { sftp.get(source, new FileOutputStream(new File(target))); }/*** Memproses file data pengguna** @param Data Root File Root Directory* @param Terakhir kali terakhir ketika file terakhir diproses* @Return saat terakhir memproses file*/private integer handle (String root, integer terakhir) {string directory = root + "/event/"; File vektor; coba {file = sftp.ls (direktori + "event _*. csv"); } catch (Exception e) {E.PrintStackTrace (); kembali 0; } // nama file string fileName; // File sementara string tmpFile; // File Pembaruan Waktu Integer MTime; // File Pembaruan Terakhir Waktu Integer MaxTime = LastTime; // memproses file pengguna untuk (objek o: file) {coba {channelsftp.lsentry f = (channelsftp.lsentry) o; // file pembaruan waktu mTime = f.getAttrs (). GetMtime (); if (mTime <= terakhir) lanjutkan; // nama file fileName = f.getFileName (); // acara terakhir acara maxTime = math.max (maxTime, mtime); // unduh file tmpfile = "/tmp/" + nama file; unduh (direktori + nama file, tmpfile); } catch (Exception e) {// TODO ERROR LOG E.PrintStackTrace (); }} // Kembalikan waktu pemrosesan terakhir dari file return maxTime; } / ** * Eksekusi dimulai pukul 1 pagi setiap hari * / @scheduled (cron = "0 0 1 * * *") public void Task () {// Dapatkan koneksi koneksi sftp (); Root string; Integer terakhir; CID panjang; Integer maxTime = terakhir; // Dapatkan daftar pengguna untuk (sftpdto sftpdto: sftpservice.findall ()) {// pengguna home directory root = sftpdto.getsftproot (); // Terakhir kali file terakhir pemrosesan terakhir = sftpdto.getLasttime (); maxTime = math.max (maxTime, handle (root, terakhir)); // perbarui waktu pemrosesan terakhir jika (! MaxTime.equals (terakhir)) {sftpdto.setLasttime (maxTime); sftpservice.update (sftpdto); }} // Rilis SFTP Resource Close (); }}Meringkaskan
Di atas adalah kode sampel untuk Java menggunakan SFTP untuk mengunduh file secara teratur. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!