本文概述
- 要求
- 安装与设定
- 创建一个SFTP客户端
- 列出目录
- 下载文件
- 上载档案
- 删除远端档案
- 变更权限
- 最后的笔记
要求 要在我们的混合应用程序中实现sftp功能, 我们需要:
- Node.js
- SSH2(为Node.js编写)
- 忍耐
安装与设定 将ssh2添加为电子项目的依赖项, 并在Node.js命令提示符下执行以下行来添加它:
npm install ssh2 --save
然后, 你就可以使用require(” ssh2″ ); 使用Javascript要求它了。
创建一个SFTP客户端 在安装ssh2库之后, 将很容易设置sftp客户端, 首先你需要使用以下方法创建一个客户端(请注意ssh2不仅支持sftp而是更多类型的ssh, ftp等):
var Client = require('ssh2').Client;
var connection = new Client();
现在有了连接, 神奇的事情发生了, 要启动sftp连接, 请使用以下代码片段。将使用最低配置准备并连接一个连接对象, 然后如果ssh连接成功, 则打开sftp连接!
var Client = require('ssh2').Client;
var connSettings = {host: 'myserver-direction.com', port: 22, // Normal is 22 portusername: 'myUsername', password: 'myPassword'// You can use a key file too, read the ssh2 documentation};
var conn = new Client();
conn.on('ready', function() {conn.sftp(function(err, sftp) {if (err) throw err;
// you'll be able to use sftp here// Use sftp to execute tasks like .unlink or chmod etc});
}).connect(connSettings);
列出目录 要列出目录, 请使用readdir方法:
var Client = require('ssh2').Client;
var connSettings = {host: 'myserver-direction.com', port: 22, // Normal is 22 portusername: 'myUsername', password: 'myPassword'// You can use a key file too, read the ssh2 documentation};
var remotePathToList = '/var/www/ourcodeworld';
var conn = new Client();
conn.on('ready', function() {conn.sftp(function(err, sftp) {if (err) throw err;
sftp.readdir(remotePathToList, function(err, list) {if (err) throw err;
// List the directory in the consoleconsole.dir(list);
// Do not forget to close the connection, otherwise you'll get troublesconn.end();
});
});
}).connect(connSettings);
list变量是一个包含对象的数组, 每个对象都包含有关远程路径中每个文件夹和文件的信息。结构应如下所示:
文章图片
下载文件 要下载远程文件, 请使用fastGet方法:
var Client = require('ssh2').Client;
var connSettings = {host: 'myserver-direction.com', port: 22, // Normal is 22 portusername: 'myUsername', password: 'myPassword'// You can use a key file too, read the ssh2 documentation};
var conn = new Client();
conn.on('ready', function() {conn.sftp(function(err, sftp) {if (err) throw err;
var moveFrom = "/remote/file/path/file.txt";
var moveTo = "/local/file/path/file.txt";
sftp.fastGet(moveFrom, moveTo , {}, function(downloadError){if(downloadError) throw downloadError;
console.log("Succesfully uploaded");
});
});
}).connect(connSettings);
上载档案 要上传文件, 你需要使用createWriteStream方法。它将创建一个具有Providen名称和本地文件内容的文件。为了提供本地文件, 我们将使用本地文件系统(require(” fs” ))并使用createReadStream方法。
var Client = require('ssh2').Client;
var connSettings = {host: 'myserver-direction.com', port: 22, // Normal is 22 portusername: 'myUsername', password: 'myPassword'// You can use a key file too, read the ssh2 documentation};
var remotePathToList = '/var/www/ourcodeworld';
var conn = new Client();
conn.on('ready', function() {conn.sftp(function(err, sftp) {if (err) throw err;
var fs = require("fs");
// Use node filesystemvar readStream = fs.createReadStream( "path-to-local-file.txt" );
var writeStream = sftp.createWriteStream( "path-to-remote-file.txt" );
writeStream.on('close', function () {console.log( "- file transferred succesfully" );
});
writeStream.on('end', function () {console.log( "sftp connection closed" );
conn.close();
});
// initiate transfer of filereadStream.pipe( writeStream );
});
}).connect(connSettings);
删除远端档案 要删除文件, 我们将使用unlink方法。此方法期望将远程文件路径作为第一个参数和一个回调。
var Client = require('ssh2').Client;
var connSettings = {host: 'myserver-direction.com', port: 22, // Normal is 22 portusername: 'myUsername', password: 'myPassword'// You can use a key file too, read the ssh2 documentation};
var remotePathToList = '/var/www/ourcodeworld';
var conn = new Client();
conn.on('ready', function() {conn.sftp(function(err, sftp) {if (err) throw err;
sftp.unlink("remote-filepath.txt", function(err){if ( err ) {console.log( "Error, problem starting SFTP: %s", err );
}else{console.log( "file unlinked" );
}conn.close();
});
});
}).connect(connSettings);
变更权限 要更改远程文件的权限, 我们将使用chmod方法。此方法将远程文件路径作为第一个参数, 将权限作为第二个参数, 最后将回调作为第三个参数。
var Client = require('ssh2').Client;
var connSettings = {host: 'myserver-direction.com', port: 22, // Normal is 22 portusername: 'myUsername', password: 'myPassword'// You can use a key file too, read the ssh2 documentation};
var remotePathToList = '/var/www/ourcodeworld';
var conn = new Client();
conn.on('ready', function() {conn.sftp(function(err, sftp) {if (err) throw err;
sftp.chmod( "remote-file-path.txt", 777, function(err){if ( err ) {console.log( "Error, problem starting SFTP: %s", err );
}else{console.log( "Mode changed" );
}});
});
}).connect(connSettings);
【如何在Electron Framework中使用node.js(SSH2)创建sftp客户端】在前面的示例中, 文件将具有777权限。 (rwxrwxrwx)对权限没有限制。任何人都可以做任何事情。通常, 这不是理想的设置, 仅是示例。
最后的笔记 你可能需要了解有关该插件的一些详细信息:
- 可以在README.md文件中找到该文档, 但仅包含源代码。
- 它没有任何类型的测试(单元测试或集成测试), 但是它的工作原理很吸引人, 这一点很重要。
推荐阅读
- Electron框架的语音命令(语音识别)和语音合成
- 如何使用Electron框架获取操作系统和硬件信息
- 如何在Android中跟踪关键的应用参与度指标
- 如何在Android中使用Sweet Alert对话框
- 小布助手在面向中文短文本的实体链指比赛中的实践应用
- MyBatis框架UserMapperTest类的改进及核心配置文件
- MyBatis入门——核心对象的生命周期(SqlSessionFactoryBuilder,SqlSessionFactory, SqlSession和Mapper)
- Android_基于监听的事件处理机制
- Android Socket发送信息时闪退