Введение в SFTP
SFTP - это аббревиатура протокола безопасной передачи файлов, защищенного протокола передачи файлов. Для передачи файлов может быть предоставлен метод защищенного сетевого шифрования. SFTP имеет почти тот же синтаксис и функционирует, что и FTP. SFTP является частью SSH и является безопасным способом передачи файлов на сервер Blogger. Фактически, в пакете SSH, безопасная подсистема передачи информации о файле, называемая SFTP (протокол передачи безопасного файла), уже включена. Сам SFTP не имеет отдельного демона. Он должен использовать Daemon SSHD (по умолчанию номер порта 22) для завершения соответствующих операций подключения и ответов. Следовательно, в некотором смысле, SFTP не похожа на серверную программу, а скорее как клиентская программа. SFTP также использует шифрование для передачи информации о аутентификации и передаваемых данных, поэтому очень безопасно использовать SFTP. Однако, поскольку этот метод передачи использует технологию шифрования/дешифрования, эффективность передачи намного ниже, чем у обычного FTP. Если у вас более высокие требования к безопасности сети, вы можете использовать SFTP вместо FTP.
Добавить зависимости
<depervice> <groupid> com.jcraft </groupid> <artifactid> jsch </artifactid> <version> 0.1.54 </version> </vehyse>
Добавить конфигурацию
SFTP: IP: 192.168.1.60 Порт: 22 Тайм -аут: 60000 retrytime: 3 Администратор: Имя пользователя: пароль администратора: 2K3xryjbd930.
Пример кода
Скачать файлы CSV в нескольких пользовательских каталогах в 1:00 каждый день в локальный каталог TMP
@Servicepublic class sftstask extends thread {private Channelsftp sftp; частная сессия; @Value ("$ {sftp.admin.username}") частная строка; @Value ("$ {sftp.admin.password}") Private String пароль; @Value ("$ {sftp.host}") частный строковый хост; @Value ("$ {sftp.port}") частный целочисленный порт; Частный Sftpservice sftpservice; public etlsftptask (sftpservice sftpservice) {this.sftpservice = sftpservice; } / *** Установить соединение SFTP* / private void connect () {try {jsch jsch = new jsch (); session = jsch.getSession (имя пользователя, хост, порт); session.setpassword (пароль); session.setConfig («StricthostKeyChecking», «Нет»); session.connect (); Канал канал = session.openchannel ("sftp"); channel.connect (); sftp = (канал канала); } catch (jschexception e) {e.printstacktrace (); }} / *** ЗАКРЫТЬ SFTP CONNECTION* / public void close () {try {if (sftp! = Null) {if (sftp.isconnected ()) sftp.disconnect (); } if (session! = null) {if (session.isconned ()) session.disconnect (); }} catch (Exception e) {e.printstackTrace (); }} / ** * Загрузите файл в локальный * * @param исходный файл исходного файла * @param целевой файл * @Throws SftPexception Exception * @Throws filenOtFoundException Exception * / private void загрузка (String Source) targe) Throws SftPexception, filenotFoundException {sftp.get (source, new fileOutputStream (new file (arget)); }/*** Обработка файлов пользовательских данных** @param root file файл корневой каталог* @param в прошлый раз в прошлый раз, когда последний файл был обработан* @return в последний раз обработки файла*/private integer handle (string root, integer в прошлое время) {string directory = root + "/event/"; Векторные файлы; try {files = sftp.ls (Directory + "Event _*. CSV"); } catch (Exception e) {e.printstackTrace (); возврат 0; } // Имя файла string fileName; // временная строка файла tmpfile; // время обновления файлов целое число mtime; // Файл последнего времени обновления integer maxtime = в прошлое; // обработать пользовательские файлы для (Object O: files) {try {channelsftp.lsentry f = (channelsftp.lsentry) o; // Обновление файла time mtime = f.getattrs (). Getmtime (); if (mtime <= в прошлое время) продолжить; // имя файла fileName = f.getFilename (); // последнее процессовое событие maxtime = math.max (maxtime, mtime); // Скачать файл tmpfile = "/tmp/" + filename; Скачать (каталог + имя файла, tmpfile); } catch (Exception e) {// TODO ошибка log e.printstacktrace (); }} // возвращать последнее время обработки файла return maxtime; } / ** * Выполнение начинается в 1 утра каждый день * / @scheduled (cron = "0 0 1 * * *") public void task () {// get sftp connect connect (); String root; Целое число в прошлое; Длинный CID; Integer maxtime = в прошлое; // Получить список пользователей для (sftpdto sftpdto: sftpservice.findall ()) {// пользователь домашний каталог root = sftpdto.getsftprout (); // последний раз последней обработки файлов в прошлое время = sftpdto.getlasttime (); maxtime = math.max (maxtime, handle (root, в прошлое)); // Обновление последнего времени обработки if (! Maxtime.equals (в прошлое)) {sftpdto.setlasttime (maxtime); sftpservice.update (sftpdto); }} // Выпустить ресурс SFTP close (); }}Суммировать
Приведенный выше пример кода для Java с использованием SFTP для регулярной загрузки файлов. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!