SFTPの紹介
SFTPは、安全なファイル転送プロトコルであるSecure File Transfer Protocolの略語です。ファイルを転送するために、安全なネットワーク暗号化方法を提供できます。 SFTPには、ほぼ同じ構文とFTPと機能があります。 SFTPはSSHの一部であり、ブロガーサーバーにファイルを転送する安全な方法です。実際、SSHパッケージでは、SFTP(セキュアファイル転送プロトコル)と呼ばれるセキュアファイル情報転送サブシステムがすでに含まれています。 SFTP自体には別のデーモンがありません。 SSHDデーモン(ポート番号はデフォルトでは22)を使用して、対応する接続操作と返信操作を完了する必要があります。したがって、ある意味では、SFTPはサーバープログラムのようなものではなく、クライアントプログラムのようなものです。 SFTPは、暗号化を使用して認証情報と送信データを送信するため、SFTPを使用することは非常に安全です。ただし、この伝送方法は暗号化/復号化テクノロジーを使用するため、伝送効率は通常のFTPの効率よりもはるかに低くなります。ネットワークセキュリティ要件が高い場合は、FTPの代わりにSFTPを使用できます。
依存関係を追加します
<Dependency> <GroupId> com.jcraft </groupId> <artifactid> jsch </artifactid> <バージョン> 0.1.54 </version> </dependency>
構成を追加します
SFTP:IP:192.168.1.60ポート:22タイムアウト:60000再試行時間:3 admin:username:admin password:2k3xryjbd930。
コードの例
毎日午前1時に複数のユーザーディレクトリにCSVファイルをローカルTMPディレクトリにダウンロードする
@servicepublic class sftptask拡張スレッド{private channelsftp sftp;プライベートセッションセッション。 @value( "$ {sftp.admin.username}")private string username; @value( "$ {sftp.admin.password}")プライベート文字列パスワード。 @value( "$ {sftp.host}")private string host; @value( "$ {sftp.port}")プライベート整数ポート; private sftpservice sftpservice; public etlsftptask(sftpservice sftpservice){this.sftpservice = sftpservice; } / *** SFTP接続を確立します* / private void connect(){try {jsch jsch = new jsch(); session = jsch.getsession(username、host、port); session.setPassWord(パスワード); session.setconfig( "stricthostkeychecking"、 "no"); session.connect();チャネルチャネル= session.openchannel( "sftp"); channel.connect(); sftp =(channelsftp)チャネル; } catch(jschexception e){e.printstacktrace(); }} / *** close sftp connection* / public void close(){try {if(sftp!= null){if(sftp.isconnected())sftp.disconnect(); } if(session!= null){if(session.isconned())session.disconnect(); }} catch(例外e){e.printstacktrace(); }} / ** *ファイルをローカルにダウンロード * * @paramソースファイル * @paramターゲットファイル * @Throws SFTPEXCEPTION例外 * @Throws FilenotFoundException Exception * / private void download(String Source、String Target)STHROWS SFTPEXCEPTION、FILENOTFOUNDEXCEPTION {sftpp.get(Source(ターゲット)); }/***ユーザーデータファイルの処理** @param rootデータファイルルートディレクトリ* @param最後のファイルが処理された最後の* @returnファイルを処理する前回ベクトルファイル。 try {files = sftp.ls(directory + "event _*。CSV"); } catch(Exception e){e.printstacktrace(); 0を返します。 } //ファイル名文字列filename; //一時ファイル文字列tmpfile; //ファイル更新時間整数mtime; //最終更新時間整数maxtime = lasttime; //(オブジェクトO:ファイル)のユーザーファイルを処理する{try {channelsftp.lsentry f =(channelsftp.lsentry)o; //ファイル更新時間mtime = f.getattrs()。getmtime(); if(mtime <= lasttime)継続; //ファイル名filename = f.getFileName(); //最終プロセスイベントmaxtime = math.max(maxtime、mtime); //ファイルtmpfile = "/tmp/" + filenameをダウンロードします。ダウンロード(ディレクトリ +ファイル名、tmpfile); } catch(例外e){// todoエラーログe.printstacktrace(); }} //ファイルの最後の処理時間を返しますmaxtimeを返します。 } / ** *実行は毎日午前1時に始まります * / @scheduled(cron = "0 0 1 * *")public void task(){// get sftp connection connect();文字列ルート;最後に整数;長いcid; integer maxtime = lasttime; //(sftpdto sftpdto:sftpservice.findall())のユーザーリストを取得{// user home home directory root = sftpdto.getsftproot(); //最後のファイルの最後の処理の最後= sftpdto.getLastTime(); maxtime = math.max(maxtime、handle(root、lasttime)); //最後の処理時間を更新するif(!maxtime.equals(lasttime)){sftpdto.setlasttime(maxtime); sftpservice.update(sftpdto); }} // sftpリソースClose()をリリースします。 }}要約します
上記は、SFTPを使用してファイルを定期的にダウンロードするJavaのサンプルコードです。それがあなたに役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!