مقدمة إلى SFTP
SFTP هو اختصار بروتوكول نقل الملفات الآمن ، وهو بروتوكول آمن نقل الملفات. يمكن توفير طريقة تشفير شبكة آمنة لنقل الملفات. يحتوي SFTP على نفس بناء الجملة ووظائف FTP. يعد SFTP جزءًا من SSH وهو وسيلة آمنة لنقل الملفات إلى خادم المدون. في الواقع ، في حزمة SSH ، تم بالفعل تضمين نظام آمن نقل معلومات الملف يسمى SFTP (بروتوكول نقل الملفات الآمن). SFTP نفسه لا يحتوي على خفي منفصل. يجب أن تستخدم SSHD Daemon (رقم المنفذ هو 22 بشكل افتراضي) لإكمال عمليات الاتصال والرد المقابلة. لذلك ، إلى حد ما ، لا يشبه SFTP برنامج الخادم ، ولكنه أشبه برامج العميل. يستخدم SFTP أيضًا تشفيرًا لنقل معلومات المصادقة والبيانات المنقولة ، لذلك من الآمن استخدام SFTP. ومع ذلك ، نظرًا لأن طريقة الإرسال هذه تستخدم تقنية التشفير/فك التشفير ، فإن كفاءة الإرسال أقل بكثير من وكفاءة FTP العادية. إذا كان لديك متطلبات أمان أعلى للشبكة ، فيمكنك استخدام SFTP بدلاً من FTP.
إضافة التبعيات
<Rependency> <roupeD> com.jcraft </rougiD> <StifactId> jsch </shintifactid> <soph> 0.1.54 </splement
إضافة التكوين
SFTP: IP: 192.168.1.60 المنفذ: 22 مهلة: 60000 إعادة المحاكاة: 3 المسؤول: اسم المستخدم: كلمة مرور: 2K3XRYJBD930.
مثال رمز
قم بتنزيل ملفات CSV في أدلة مستخدم متعددة في الساعة 1 صباحًا كل يوم إلى دليل TMP المحلي
ServicePublic Class Sftptask يمتد Thread {Private Channelsftp SFTP ؛ جلسة خاصة ؛ Value ("$ {sftp.admin.username}") اسم المستخدم الخاص بالسلسلة الخاصة ؛ value ("$ {sftp.admin.password}") كلمة مرور السلسلة الخاصة ؛ Value ("$ {sftp.host}") مضيف سلسلة خاصة ؛ Value ("$ {sftp.port}") منفذ Integer الخاص ؛ sftpservice sftpservice ؛ etlsftptask العامة (sftpservice sftpservice) {this.sftpservice = sftpservice ؛ } / *** إنشاء اتصال sftp* / private void connect () {try {jsch jsch = new jsch () ؛ الجلسة = jsch.getSession (اسم المستخدم ، المضيف ، الميناء) ؛ Session.setPassword (كلمة المرور) ؛ Session.setConfig ("stricthostkeychecking" ، "no") ؛ Session.connect () ؛ Channel Channel = Session.OpenChannel ("SFTP") ؛ channel.connect () ؛ قناة SFTP = (channelsftp) ؛ } catch (jschexception e) {e.printStackTrace () ؛ }} / *** أغلق اتصال SFTP* / public void close () {try {if (sftp! = null) {if (sftp.isconnected ()) sftp.disconnect () ؛ } if (session! = null) {if (session.isconnected ()) session.disconnect () ؛ }} catch (استثناء e) {E.PrintStackTrace () ؛ }} / ** * قم بتنزيل الملف إلى ملف مصدر المصدر المحلي * * param * ملف الهدف من Param * throws sftpexception استثناء * throws fileNotFoundException استثناء * / private void download (سلسلة السلسلة ، سلسلة السلسلة) يلقي sftpexception ، fileNotFoundException {sftp.get (مصدر ، ملف جديد (ملف جديد)) ؛ }/*** معالجة ملفات بيانات المستخدم** param جذر بيانات الجذر الجذر* param آخر مرة في آخر مرة عندما تمت معالجة الملف الأخير* @مرة أخرى في المرة الأخيرة لمعالجة الملف*/مقبض integer الخاص (سلسلة الجذر ، integer last time) {String directory = root + "/event/" ؛ ملفات المتجهات ؛ TREE {files = sftp.ls (directory + "event _*. CSV") ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ العودة 0 ؛ } // اسم الملف اسم ملف السلسلة ؛ // سلسلة الملف المؤقتة tmpfile ؛ // File Update Time Integer MTime ؛ // ملف آخر تحديث وقت integer maxtime = last time ؛ // معالجة ملفات المستخدم لـ (الكائن O: files) {try {Channelsftp.lsentry f = (channelsftp.lsentry) o ؛ // file update time mTime = f.getattrs (). getMtime () ؛ إذا (mTime <= last time) تستمر ؛ // file filename = f.getFilename () ؛ // آخر عملية حدث maxtime = math.max (maxtime ، mtime) ؛ // تنزيل ملف tmpfile = "/tmp/" + filename ؛ تنزيل (دليل + اسم الملف ، tmpfile) ؛ } catch (استثناء e) {// todo error log e.printStackTrace () ؛ }} // إرجاع آخر وقت معالجة في ملف maxtime ؛ } / ** * يبدأ التنفيذ في الساعة الواحدة صباحًا كل يوم * / scheduled (cron = "0 0 1 * * *") Task public void () {// get sftp connect () ؛ جذر السلسلة عدد صحيح في الوقت الأخير ؛ CID طويل. عدد صحيح maxtime = آخر مرة ؛ // احصل على قائمة المستخدمين لـ (SFTPDTO SFTPDTO: sftpservice.findall ()) {// مستخدم دليل الدليل الرئيسي = sftpdto.getsftproot () ؛ // في المرة الأخيرة من معالجة الملف الأخيرة last time = sftpdto.getlasttime () ؛ maxtime = math.max (maxtime ، مقبض (الجذر ، الأخير)) ؛ // قم بتحديث آخر وقت معالجة if (! maxtime.equals (last time)) {sftpdto.setlasttime (maxtime) ؛ sftpservice.update (sftpdto) ؛ }} // relection sftp Resource Close () ؛ }}لخص
ما ورد أعلاه هو رمز عينة لجافا باستخدام SFTP لتنزيل الملفات بانتظام. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!