บทนำสู่ SFTP
SFTP เป็นตัวย่อของโปรโตคอลการถ่ายโอนไฟล์ที่ปลอดภัยซึ่งเป็นโปรโตคอลการถ่ายโอนไฟล์ที่ปลอดภัย สามารถให้วิธีการเข้ารหัสเครือข่ายที่ปลอดภัยสำหรับการถ่ายโอนไฟล์ SFTP มีไวยากรณ์และฟังก์ชั่นเกือบเท่ากันกับ FTP SFTP เป็นส่วนหนึ่งของ SSH และเป็นวิธีที่ปลอดภัยในการถ่ายโอนไฟล์ไปยังเซิร์ฟเวอร์บล็อกเกอร์ ในความเป็นจริงในแพ็คเกจ SSH จะมีระบบย่อยการถ่ายโอนข้อมูลไฟล์ที่ปลอดภัยที่เรียกว่า SFTP (Secure File Transfer Protocol) แล้ว SFTP เองไม่มี daemon แยกต่างหาก จะต้องใช้ SSHD daemon (หมายเลขพอร์ตคือ 22 โดยค่าเริ่มต้น) เพื่อดำเนินการเชื่อมต่อที่สอดคล้องกันและการตอบกลับ ดังนั้นในแง่หนึ่ง SFTP ไม่เหมือนโปรแกรมเซิร์ฟเวอร์ แต่เป็นเหมือนโปรแกรมไคลเอนต์ SFTP ยังใช้การเข้ารหัสเพื่อส่งข้อมูลการรับรองความถูกต้องและข้อมูลที่ส่งดังนั้นจึงปลอดภัยมากที่จะใช้ SFTP อย่างไรก็ตามเนื่องจากวิธีการส่งสัญญาณนี้ใช้เทคโนโลยีการเข้ารหัส/ถอดรหัสประสิทธิภาพการส่งสัญญาณจึงต่ำกว่า FTP ทั่วไปมาก หากคุณมีข้อกำหนดด้านความปลอดภัยของเครือข่ายที่สูงขึ้นคุณสามารถใช้ SFTP แทน FTP
เพิ่มการพึ่งพา
<Ederency> <roupId> com.jcraft </groupId> <ratifactId> JSCH </artifactId> <version> 0.1.54 </เวอร์ชัน> </predency>
เพิ่มการกำหนดค่า
SFTP: IP: 192.168.1.60 พอร์ต: 22 หมดเวลา: 60000 retrytime: 3 ผู้ดูแลระบบ: ชื่อผู้ใช้: รหัสผ่านผู้ดูแลระบบ: 2k3xryjbd930
ตัวอย่างรหัส
ดาวน์โหลดไฟล์ CSV ในหลายไดเรกทอรีผู้ใช้เวลา 13.00 น. ทุกวันไปยังไดเรกทอรี TMP ท้องถิ่น
@ServicePublic คลาส SFTPTASK ขยายเธรด {ช่องส่วนตัว SFTP; เซสชั่นส่วนตัว; @Value ("$ {sftp.admin.username}") ชื่อผู้ใช้สตริงส่วนตัว; @Value ("$ {sftp.admin.password}") รหัสผ่านสตริงส่วนตัว; @Value ("$ {sftp.host}") โฮสต์สตริงส่วนตัว; @Value ("$ {sftp.port}") พอร์ตจำนวนเต็มส่วนตัว; SFTPSERVICE ส่วนตัว SFTPSERVICE; สาธารณะ etlsftptask (sftpservice sftpservice) {this.sftpservice = sftpservice; } / *** สร้างการเชื่อมต่อ SFTP* / โมฆะส่วนตัวเชื่อมต่อ () {ลอง {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* / โมฆะสาธารณะปิด () {ลอง {ถ้า (sftp! = null) {ถ้า (sftp.isconnected ()) sftp.disconnect (); } if (เซสชัน! = null) {if (session.isconnected ()) session.disconnect (); }} catch (exception e) {e.printstacktrace (); }} / ** * ดาวน์โหลดไฟล์ไปยัง local * * @param แหล่งต้นฉบับไฟล์ * @param เป้าหมายเป้าหมายไฟล์ * @throws sftpexception exception * @throws filenotfoundexception ยกเว้น * / โมฆะส่วนตัวดาวน์โหลด }/*** การประมวลผลไฟล์ข้อมูลผู้ใช้** @param root data data directory* @param ครั้งล่าสุดเมื่อไฟล์ล่าสุดถูกประมวลผล* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @string directory = root + "/event/"; ไฟล์เวกเตอร์; ลอง {files = sftp.ls (ไดเรกทอรี + "เหตุการณ์ _*. csv"); } catch (exception e) {e.printstacktrace (); กลับ 0; } // ชื่อไฟล์สตริงชื่อไฟล์; // สตริงไฟล์ชั่วคราว tmpfile; // การอัปเดตไฟล์เวลาจำนวนเต็ม mtime; // ไฟล์การอัปเดตครั้งล่าสุดจำนวนเต็ม maxtime = ล่าสุด; // ประมวลผลไฟล์ผู้ใช้สำหรับ (วัตถุ o: ไฟล์) {ลอง {channelsftp.lsentry f = (channelsftp.lsentry) o; // เวลาอัปเดตไฟล์ mtime = f.getattrs (). getMtime (); ถ้า (mtime <= ล่าสุด) ดำเนินการต่อ; // ชื่อไฟล์ชื่อไฟล์ = f.getFileName (); // กระบวนการสุดท้ายเหตุการณ์ maxtime = math.max (maxtime, mtime); // ดาวน์โหลดไฟล์ tmpfile = "/tmp/" + ชื่อไฟล์; ดาวน์โหลด (ไดเรกทอรี + ชื่อไฟล์, tmpfile); } catch (exception e) {// toDo บันทึกข้อผิดพลาด e.printstacktrace (); }} // ส่งคืนเวลาการประมวลผลล่าสุดของไฟล์ส่งคืน maxtime; } / ** * การดำเนินการเริ่มต้นเวลา 13.00 น. ทุกวัน * / @scheduled (cron = "0 0 1 * * *") งานโมฆะสาธารณะ () {// รับการเชื่อมต่อ SFTP เชื่อมต่อ (); สตริงรูท; จำนวนเต็มล่าสุด; CID ยาว; จำนวนเต็ม maxtime = เมื่อเวลาผ่านไป; // รับรายชื่อผู้ใช้สำหรับ (SFTPDTO SFTPDTO: SFTPSERVICE.FINDALL ()) {// ผู้ใช้โฮมไดเรกทอรีรูท = SFTPDTO.GETSFTPROOT (); // ครั้งสุดท้ายของการประมวลผลไฟล์ล่าสุดล่าสุด = sftpdto.getLasttime (); maxtime = math.max (maxtime, handle (root, time thate)); // อัปเดตเวลาประมวลผลล่าสุดถ้า (! maxtime.equals (ล่าสุด)) {sftpdto.setLasttime (maxtime); sftpservice.update (sftpdto); }} // รีลีสทรัพยากร SFTP ปิด (); -สรุป
ด้านบนเป็นรหัสตัวอย่างสำหรับ Java โดยใช้ SFTP เพื่อดาวน์โหลดไฟล์เป็นประจำ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!