什么,自动部署前端包这么简单?

科技   2024-11-22 12:09   北京  

点击上方 程序员成长指北,关注公众号

回复1,加入高级Node交流群

SSH2-SFTP-Client:简化SFTP文件传输的Node.js插件

在现代开发环境中,文件传输是一个不可或缺的环节,特别是在需要在不同服务器之间同步数据或上传下载文件时。SSH(安全外壳协议)和SFTP(SSH文件传输协议)因其安全性和灵活性而广受欢迎。对于Node.js开发者来说,ssh2-sftp-client是一个强大的插件,能够极大地简化SFTP操作。本文将详细介绍ssh2-sftp-client的功能、安装方法以及如何使用它进行文件传输。

一、概述

ssh2-sftp-client是一个基于ssh2库的Node.js模块,它提供了一个高级的API,使得通过SFTP进行文件上传、下载、删除、列出等操作变得简单直观。该插件封装了底层的SFTP细节,开发者无需深入了解SFTP协议的具体实现,即可快速实现文件传输功能。

二、安装

要使用ssh2-sftp-client,首先需要确保你的Node.js(版本>14,本人用的16)环境已经安装。然后,你可以通过npm(Node包管理器)来安装这个插件:

bash
 代码解读
复制代码
npm install ssh2-sftp-client

三、基本用法

1. 导入模块

在你的Node.js文件中,首先导入ssh2-sftp-client模块:

const SftpClient = require('ssh2-sftp-client');
2. 连接到SFTP服务器

使用connect方法连接到SFTP服务器,需要提供主机名、端口号、用户名和密码等信息。连接成功后,你可以使用返回的连接对象进行各种文件操作。

const sftp = new SftpClient();

sftp.connect({
  host'your.sftp.server',
  port'22',
  username'your-username',
  password'your-password'
}).then(() => {
  console.log('Connected to SFTP server');
  // 在这里进行文件操作
}).catch(err => {
  console.error('Error connecting to SFTP server:', err);
});
3. 文件操作
  • 上传文件
sftp.put('/local/path/to/file.txt''/remote/path/to/file.txt')
  .then(() => {
    console.log('File uploaded successfully');
  })
  .catch(err => {
    console.error('Error uploading file:', err);
  });
  • 下载文件
sftp.get('/remote/path/to/file.txt''/local/path/to/file.txt')
  .then(() => {
    console.log('File downloaded successfully');
  })
  .catch(err => {
    console.error('Error downloading file:', err);
  });
  • 列出目录内容
sftp.list('/remote/path')
  .then(data => {
    console.log('Directory contents:', data);
  })
  .catch(err => {
    console.error('Error listing directory:', err);
  });
  • 删除文件
sftp.delete('/remote/path/to/file.txt')
  .then(() => {
    console.log('File deleted successfully');
  })
  .catch(err => {
    console.error('Error deleting file:', err);
  });
  • 上传文件夹
sftp.uploadDir('本地目录''远程目录')
  .then(() => {
    console.log('File downloadDir successfully');
  })
  .catch(err => {
    console.error('Error downloadDir file:', err);
  });
  • 下载服务器的文件夹
sftp.downloadDir('远程目录''本地目录')
  .then(() => {
    console.log('File downloadDir successfully');
  })
  .catch(err => {
    console.error('Error downloadDir file:', err);
  });
  • 重命名服务器文件夹
sftp.rename('远程目录''远程新目录')
  .then(() => {
    console.log('File rename successfully');
  })
  .catch(err => {
    console.error('Error rename file:', err);
  });
4. 断开连接

完成所有文件操作后,别忘了断开与SFTP服务器的连接:

sftp.end()
  .then(() => {
    console.log('Disconnected from SFTP server');
  })
  .catch(err => {
    console.error('Error disconnecting from SFTP server:', err);
  });

四、实践

  1. 创建js文件
const SftpClient = require('ssh2-sftp-client')
const sftp = new SftpClient()

const config = {
  host'ip',
  port'端口号',
  username'服务器账号',
  password'服务器密码' // 或者使用 privateKey 字段提供私钥路径
}

const remoteDir = '/database/nginx/html/TianJin/operation' // 远程目录路径
const newFolderPath = '/database/nginx/html/TianJin/operationBak1' // 重命名后的文件夹新路径(仅改变名称)
// const localDir = 'bak' // 本地保存路径


sftp.connect(config).then(() => {
  console.log('连接成功!')
  // console.log('开始下载目录...')
  // return sftp.downloadDir(remoteDir, localDir) // 这里本意想下载到本地进行备份
  console.log('开始备份文件夹...')
  // return sftp.rename(remoteDir, newFolderPath) // 重命名文件夹(远程已经有的文件夹名称,会重命名错误)
}).then(() => {
  // console.log('目录下载成功!')
  console.log('文件夹备份成功!')
  console.log('开始上传文件...')
  sftp.uploadDir('operation', remoteDir).then(() => { //'operation'打包后的文件夹目录,这里js放在同级目录中所以,这里可以只填写文件夹名
    console.log('文件上传成功!'//这里会直接将远程文件目录覆盖掉,所以前面可以加上备份操作
    return sftp.end()
  }).catch((err) => {
    console.error(err.message)
    if (sftp.sftp) {
      sftp.sftp.end()
    }
  })
}).catch((err) => {
  console.error(err.message)
  if (sftp.sftp) {
    sftp.sftp.end()
  }
})
  1. 将js文件放入项目中,位置随意,然后在package.json中加入一行


  1. 执行脚本
npm run deploy

五、高级功能

ssh2-sftp-client还支持许多高级功能,如使用SSH密钥进行身份验证、流式文件传输、处理大文件等。你可以查阅官方文档获取更多详细信息和示例代码。

六、总结

ssh2-sftp-client是一个功能强大且易于使用的Node.js插件,它极大地简化了通过SFTP进行文件传输的复杂性。无论你是需要上传、下载、删除文件,还是列出目录内容,这个插件都能提供直观且高效的API。如果你正在开发需要文件传输功能的Node.js应用,不妨尝试一下ssh2-sftp-client

本文转载于稀土掘金技术社区,作者:__往哪跑__

原文链接:https://juejin.cn/post/7434560677908594739


Node 社群


我组建了一个氛围特别好的 Node.js 社群,里面有很多 Node.js小伙伴,如果你对Node.js学习感兴趣的话(后续有计划也可以),我们可以一起进行Node.js相关的交流、学习、共建。下方加 考拉 好友回复「Node」即可。

   “分享、点赞在看” 支持一波👍


程序员成长指北
专注 Node.js 技术栈分享,从 前端 到 Node.js 再到 后端数据库,祝您成为优秀的高级 Node.js 全栈工程师。一个有趣的且乐于分享的人。座右铭:今天未完成的,明天更不会完成。
 最新文章