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包管理器)来安装这个插件:
1 | npm install ssh2-sftp-client |
三、基本用法
1. 导入模块
在你的Node.js文件中,首先导入ssh2-sftp-client模块:
1 | const SftpClient = require('ssh2-sftp-client'); |
2. 连接到SFTP服务器
使用connect方法连接到SFTP服务器,需要提供主机名、端口号、用户名和密码等信息。连接成功后,你可以使用返回的连接对象进行各种文件操作。
1 | const sftp = new SftpClient(); |
3. 文件操作
- 上传文件
1 | sftp.put('/local/path/to/file.txt', '/remote/path/to/file.txt') |
- 下载文件
1 | sftp.get('/remote/path/to/file.txt', '/local/path/to/file.txt') |
- 列出目录内容
1 | sftp.list('/remote/path') |
- 删除文件
1 | sftp.delete('/remote/path/to/file.txt') |
- 上传文件夹
1 | sftp.uploadDir('本地目录','远程目录') |
- 下载服务器的文件夹
1 | sftp.downloadDir('远程目录','本地目录') |
- 重命名服务器文件夹
1 | sftp.rename('远程目录','远程新目录') |
4. 断开连接
完成所有文件操作后,别忘了断开与SFTP服务器的连接:
1 | sftp.end() |
四、实践
创建js文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40const 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()
}
})- 将js文件放入项目中,位置随意,然后在package.json中加入一行
1 | "scripts": { |
- 执行脚本
1 | npm run deploy |
五、高级功能
ssh2-sftp-client还支持许多高级功能,如使用SSH密钥进行身份验证、流式文件传输、处理大文件等。
六、总结
ssh2-sftp-client是一个功能强大且易于使用的Node.js插件,它极大地简化了通过SFTP进行文件传输的复杂性。无论你是需要上传、下载、删除文件,还是列出目录内容,这个插件都能提供直观且高效的API。如果你正在开发需要文件传输功能的Node.js应用,不妨尝试一下ssh2-sftp-client。