下面是关于利用Node.js监控文件变化并使用SFTP上传到服务器的完整攻略。
准备工作
在开始我们的攻略之前,需要先准备以下工作:
- 首先,需要确保你已经安装了Node.js环境。
- 然后,安装
chokidar
和ssh2-sftp-client
两个npm包,分别用于文件监控和SFTP上传。
可以使用以下命令进行安装:
npm install chokidar ssh2-sftp-client
- 接着,需要准备好目标服务器的SSH信息,包括服务器IP地址、端口、用户名、密码等等。
监控文件变化并上传到服务器
有了上面的准备工作,我们现在就可以开始监听文件变化并上传文件到服务器了。 下面是完整的代码:
const chokidar = require('chokidar');
const Client = require('ssh2-sftp-client');
const sftp = new Client();
const remoteDir = '/your/remote/directory/'; // 远程目录
const localDir = '/your/local/directory/'; // 本地目录
sftp
.connect({
host: 'your.server.ip.address',
port: '22',
username: 'yourUsername',
password: 'yourPassword',
})
.then(() => {
console.log('SFTP connection successful');
startWatcher();
})
.catch((err) => {
console.error('SFTP connection error:', err);
sftp.end();
});
function startWatcher() {
const watcher = chokidar.watch(localDir, {
ignored: /(^|[\/\\])\../, // 忽略文件夹和以.开头的文件
persistent: true, // 监听状态是否保持,false表示只触发一次
awaitWriteFinish: true, // 等待写完成才执行
});
watcher
.on('add', (path) => {
console.log(`File ${path} has been added`);
uploadFile(path);
})
.on('change', (path) => {
console.log(`File ${path} has been changed`);
uploadFile(path);
})
.on('unlink', (path) => {
console.log(`File ${path} has been removed`);
deleteFile(path);
})
.on('error', (error) => {
console.error(`Watcher error: ${error}`);
});
}
function uploadFile(path) {
sftp
.put(`${localDir}/${path}`, `${remoteDir}/${path}`)
.then(() => {
console.log(`${path} uploaded successfully`);
})
.catch((err) => {
console.error(`Error uploading ${path}: ${err}`);
});
}
function deleteFile(path) {
let remotePath = `${remoteDir}/${path}`;
sftp
.delete(remotePath)
.then(() => {
console.log(`${remotePath} deleted successfully`);
})
.catch((err) => {
console.error(`Error deleting ${remotePath}: ${err}`);
});
}
以上代码的主要过程为:
- 连接服务器
- 开始监控本地目录的文件变化
- 根据变化类型(添加、修改、删除)执行对应的操作
- 通过SFTP将文件上传到服务器或从服务器删除文件
示例说明
接下来,来演示两个简单的示例,以说明上面的代码的使用方法。
示例一:上传单个文件
假设你的本地目录/path/to/local/directory
下有一个文件example.txt
,你想把这个文件上传到服务器的目录/path/to/remote/directory
中。
你可以按照以下步骤进行操作:
- 在你的服务器上启动以上代码。
- 通过命令行或文件管理器打开本地目录
/path/to/local/directory
。 - 将文件
example.txt
复制或移动到该目录下。 - 监测到文件变化,将会自动上传文件到服务器的
/path/to/remote/directory
中。
示例二:上传多个文件
假设你的本地目录/path/to/local/directory
下有多个文件,你想把这些文件上传到服务器的目录/path/to/remote/directory
中。
你可以按照以下步骤进行操作:
- 在你的服务器上启动以上代码。
- 通过命令行或文件管理器打开本地目录
/path/to/local/directory
。 - 将该目录下的多个文件复制或移动到该目录下。
- 监测到文件变化,将会自动上传这些文件到服务器的
/path/to/remote/directory
中。
到此为止,以上就是利用Node.js监控文件变化并使用SFTP上传到服务器的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用nodejs监控文件变化并使用sftp上传到服务器 - Python技术站