如何在Android中使用Cordova创建SFTP客户端

本文概述

  • 要求
  • 实现sftp客户端
SSH文件传输协议(SFTP), 也称为安全文件传输协议, 可实现网络主机之间的安全文件传输功能。
你可以在Cordova Android应用中使用此插件轻松创建图形sftp客户端。
要求要在我们的Android Cordova应用中使用sftp功能, 我们将使用cordova-ourcodeworld-sftpplugin。该插件在后台使用JSCh(JSch-Java安全通道-JCraft), 并为以下常见任务提供支持:
  • 安全连接。
  • 列出远程路径。
  • 上传文件。
  • 下载文件。
  • 删除远程文件。
  • 使用私钥进行连接。
  • 下载/上传进度指示器。
要在你的项目中安装, 请执行以下命令:
cordova plugin add https://github.com/sdkcarlos/cordova-ourcodeworld-sftpplugin.git

在此处阅读有关插件及其文档的更多信息。安装后, 在名为:OurCodeWorldSFTP的窗口中(在cordova的ondeviceready事件之后)将提供一个全局变量。
该插件仅适用于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攻击), 请使用setKnownHosts方法向客户端添加一个known_hosts文件, 该方法将设备中已知主机文件的路径作为第一个参数。
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); } });

【如何在Android中使用Cordova创建SFTP客户端】玩得开心

    推荐阅读