Node.js 中使用 ssh2-sftp-client 上传文件并实时获取速率大小和进度
ssh2-sftp-client 是一个用于 Node.js 的库,它提供了用于与 SFTP 服务器交互的方法。获取文件传输速率和进度可以通过监听流的事件来实现。
以下是一个简单的例子,展示了如何获取文件上传的速度和进度:
const { Client } = require('ssh2-sftp-client');
const fs = require('fs');
async function uploadFileWithProgress(sftpClient, localPath, remotePath) {
const readStream = fs.createReadStream(localPath);
const writeStream = sftpClient.createWriteStream(remotePath);
let totalBytes = 0;
let transferredBytes = 0;
readStream.on('data', (chunk) => {
totalBytes += chunk.length;
});
writeStream.on('data', (chunk) => {
transferredBytes += chunk.length;
const progress = (transferredBytes / totalBytes) * 100;
console.log(`Progress: ${progress.toFixed(2)}%`);
});
writeStream.on('close', () => {
console.log('Upload completed.');
});
readStream.pipe(writeStream);
}
// 使用示例
const sftp = new Client();
const localFilePath = 'path/to/local/file';
const remoteFilePath = 'path/to/remote/file';
(async () => {
await sftp.connect({
// 你的 SFTP 连接配置
});
try {
await uploadFileWithProgress(sftp, localFilePath, remoteFilePath);
} finally {
await sftp.end();
}
})();
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
40
41
42
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
40
41
42
在这个例子中,我们创建了一个本地文件的 ReadStream 和一个远程文件的 WriteStream。我们监听 data 事件来计算已传输的字节数,并据此计算进度。当上传完成时,WriteStream 会触发 close 事件。这个例子提供了一个简单的方法来跟踪文件上传的进度。
上次更新: 2024/04/07, 16:22:38
- 01
- linux 在没有 sudo 权限下安装 Ollama 框架12-23
- 02
- Express 与 vue3 使用 sse 实现消息推送(长连接)12-20