个性化阅读
专注于IT技术分析

如何在Electron Framework中使用node.js(SSH2)创建sftp客户端

本文概述

使用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变量是一个包含对象的数组, 每个对象都包含有关远程路径中每个文件夹和文件的信息。结构应如下所示:

如何在Electron Framework中使用node.js(SSH2)创建sftp客户端1

下载文件

要下载远程文件, 请使用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文件中找到该文档, 但仅包含源代码。
  • 它没有任何类型的测试(单元测试或集成测试), 但是它的工作原理很吸引人, 这一点很重要。

玩得开心

赞(0)
未经允许不得转载:srcmini » 如何在Electron Framework中使用node.js(SSH2)创建sftp客户端

评论 抢沙发

评论前必须登录!