Как создать sftp-клиент с помощью cordova в Android

Протокол передачи файлов SSH (SFTP), также известный как протокол безопасной передачи файлов, обеспечивает возможности безопасной передачи файлов между сетевыми узлами.

Вы можете легко создать графический клиент sftp, используя этот плагин в своем приложении Cordova для Android.

Требования

Чтобы использовать функцию sftp в нашем приложении Android Cordova, мы будем использовать cordova-ourcodeworld-sftpplugin, Этот плагин использует JSCh (JSch — безопасный канал Java — JCraft) под капотом и предлагает поддержку для следующих общих задач:

  • Безопасное соединение.
  • Укажите удаленный путь.
  • Загрузить файлы.
  • Скачать файлы.
  • Удалить удаленный файл.
  • Используйте закрытый ключ для подключения.
  • Индикатор прогресса загрузки / выгрузки.

Для установки в вашем проекте выполните следующую команду:

cordova plugin add https://github.com/sdkcarlos/cordova-ourcodeworld-sftpplugin.git

Подробнее о плагине и его документации читайте здесь. После установки глобальная переменная будет доступна (после события ondeviceready cordova) в окне с именем: OurCodeWorldSFTP.

Этот плагин работает только для Android.

Реализация клиента sftp

Вам необходимо выполнить следующие шаги, чтобы правильно использовать плагин:

  1. Создайте SFTP-клиент.
  2. Используйте созданный клиент для выполнения всех предусмотренных задач плагина.

Для создания клиента используйте createSFTPClient метод:

/**
* A client object to download/upload/delete files using SFTP.
*
* return {Object}
*/
var client = OurCodeWorldSFTP.createSFTPClient();

Теперь, когда у нас есть клиент, укажите правильные учетные данные, чтобы начать использовать плагин.

Если вы используете закрытый ключ:

// Remote path to list
var pathToList = "/var/www/vhosts/myproject";
var myCredential = {
//or use the ip instead
//url: "127.0.0.1 etc..."
url: "myserver.something.com",
username : null,
password : null,
// The path to the .pub local file in your device
privateKeyPath : "/storage/emulated/0/id_dsa.pub"
};
client.setCredentials(myCredential.url, myCredential.username, myCredential.password);
client.setPath(pathToList);
client.setIdentity(myCredential.privateKeyPath);

Или, если вы используете имя пользователя и пароль:

// Remote path to list
var pathToList = "/var/www/vhosts/myproject";
var myCredential = {
//or use the ip instead
//url: "127.0.0.1 etc..."
url: "myserver.something.com",
username : "root",
password : "rootpassword",
};
client.setCredentials(myCredential.url, myCredential.username, myCredential.password);
client.setPath(pathToList);

Если вы хотите повысить безопасность соединения (и предотвратить атаки MITM), добавьте в файл файл known_hosts, используя метод setKnownHosts, который в качестве первого параметра ожидает путь к файлу известных хостов в устройстве.

client.setKnownHosts("/storage/emulated/0/known_hosts");

Теперь, когда учетные данные действительны, вы можете использовать любые задачи, которые предоставляет плагин.

Перечислите путь

Укажите путь, используя list метод (обратите внимание, что путь был установлен с помощью setPath метод в предыдущем коде, вы можете динамически изменить его с помощью этого метода):

/**
* Receives an array with objects with all the content of a path (files and folders)
*/
var success = function(data) {
console.info(data);
/**
Outputs :
[
{
name:"Folder/File name",
filepath: "/var/www/vhosts/myproject/something.txt",
isDir:false, // is Folder = true, is File = false
isLink:false,
size:"123", // bytes
permissions: "????",
permissions_string:"xxxxx",
}
];
*/
}
var failure = function(e) {
console.error(e);
}
client.list(success, failure);

Скачайте файл и покажите прогресс

Чтобы скачать файл, используйте downloadFile метод клиента. Эта функция ожидает в качестве первого параметра удаленный путь к файлу, а в качестве второго параметра — файл назначения на устройстве и, наконец, обратные вызовы.

Обратите внимание, что путь к локальному файлу не использует file:// префикс. Вместо этого используйте относительный путь, схема Android FileURI не поддерживается.

client.downloadFile("/var/www/vhosts/myproject/file.txt","/storage/emulated/0/file.txt",{
success:function(download){
// see the object info
console.log(download);
// If the download has been finished
if(download.finished == true){
console.info("The file has been succesfully downloaded");
// Else is stills being downloaded
}else{
//Display the progress
console.log("Progress download : "+download.progress+"%. "+ download.bytesprogress +" bytes downloaded of " + download.filesizebytes + "total");
}
},
error:function(er){
console.error(er);
}
});

Загрузить файл и показать прогресс

Для загрузки файла используйте uploadFile метод клиента. Эта функция в качестве первого параметра ожидает путь к файлу на устройстве, а в качестве второго параметра — файл назначения на сервере удаления и, наконец, обратные вызовы.

client.uploadFile("/storage/emulated/0/file.txt","/var/www/vhosts/myproject/file.txt",{
success:function(upload){
// see the object info
console.log(upload);
// if the file has been uploaded
if(upload.finished == true){
console.info("The file has been succesfully uploaded");
}else{
//Display the progress as it still being downloaded
console.log("Progress upload : "+upload.progress+"%. "+ upload.bytesprogress +" bytes uploaded of " + upload.filesizebytes + "total");
}
},
error:function(er){
console.error(er);
}
});

Удалить файл

Чтобы удалить файл, используйте метод removeFile клиента. Эта функция ожидает в качестве первого параметра удаленный путь к файлу (на сервере) и, наконец, обратные вызовы.

client.removeFile("/var/www/vhosts/myproject/file.txt",{
success:function(removed){
// see the object info
console.log(removed);
if(download.deleted == true){
console.log("File removed from the server");
}
},
error:function(er){
// snap ! An error :( maybe doesnt exist?
console.error(er);
}
});

Повеселись

Ссылка на основную публикацию
Adblock
detector