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

本文概述

  • 要求
  • 安装与设定
  • 创建一个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 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变量是一个包含对象的数组, 每个对象都包含有关远程路径中每个文件夹和文件的信息。结构应如下所示:
如何在Electron Framework中使用node.js(SSH2)创建sftp客户端

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

    推荐阅读