本文概述
使用SSH2库, 你将能够与服务器建立ssh连接, 以轻松传输(下载和上传)文件。 ssh2是用纯JavaScript编写的, 用于node.js的SSH2客户端模块。由于电子框架能够使用node.js, 因此你可以使用此插件轻松创建自己的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 port
username: '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 port
username: '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 console
console.dir(list);
// Do not forget to close the connection, otherwise you'll get troubles
conn.end();
});
});
}).connect(connSettings);
list变量是一个包含对象的数组, 每个对象都包含有关远程路径中每个文件夹和文件的信息。结构应如下所示:
下载文件
要下载远程文件, 请使用fastGet方法:
var Client = require('ssh2').Client;
var connSettings = {
host: 'myserver-direction.com', port: 22, // Normal is 22 port
username: '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 port
username: '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 filesystem
var 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 file
readStream.pipe( writeStream );
});
}).connect(connSettings);
删除远端档案
要删除文件, 我们将使用unlink方法。此方法期望将远程文件路径作为第一个参数和一个回调。
var Client = require('ssh2').Client;
var connSettings = {
host: 'myserver-direction.com', port: 22, // Normal is 22 port
username: '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 port
username: '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);
在前面的示例中, 文件将具有777权限。 (rwxrwxrwx)对权限没有限制。任何人都可以做任何事情。通常, 这不是理想的设置, 仅是示例。
最后的笔记
你可能需要了解有关该插件的一些详细信息:
- 可以在README.md文件中找到该文档, 但仅包含源代码。
- 它没有任何类型的测试(单元测试或集成测试), 但是它的工作原理很吸引人, 这一点很重要。
玩得开心
评论前必须登录!
注册