ssh2-sftp-client 上传文件夹时获取上传速度和文件夹大小
使用ssh2-sftp-client
上传文件夹时,你可以通过递归遍历文件夹并上传每个文件来获取上传速度和文件夹大小。以下是一个简化的示例代码:
const { SFTPClient } = require('ssh2-sftp-client');
const fs = require('fs');
const path = require('path');
const client = new SFTPClient();
async function uploadFolder(localDir, remoteDir) {
await client.connect();
let startTime = Date.now();
let totalSize = 0;
// 递归计算文件夹大小
function calculateFolderSize(dir) {
fs.readdirSync(dir).forEach(file => {
let fullPath = path.join(dir, file);
let stats = fs.statSync(fullPath);
if (stats.isFile()) {
totalSize += stats.size;
} else if (stats.isDirectory()) {
calculateFolderSize(fullPath);
}
});
}
// 递归上传文件夹
function uploadDirectory(localDir, remoteDir) {
fs.readdirSync(localDir).forEach(file => {
let localPath = path.join(localDir, file);
let remotePath = path.join(remoteDir, file);
let stats = fs.statSync(localPath);
if (stats.isFile()) {
client.put(localPath, remotePath);
// 这里可以添加上传进度的处理逻辑
} else if (stats.isDirectory()) {
client.mkdir(remotePath, true);
uploadDirectory(localPath, remotePath);
}
});
}
// 计算文件夹大小
calculateFolderSize(localDir);
// 上传文件夹
uploadDirectory(localDir, remoteDir);
// 等待上传完成(根据实际情况调整)
await client.end();
let endTime = Date.now();
let timeTaken = (endTime - startTime) / 1000; // 转换为秒
let speed = (totalSize / 1024 / 1024 / timeTaken).toFixed(2); // 转换为 MB/s
console.log(`Total size: ${totalSize} bytes`);
console.log(`Time taken: ${timeTaken} seconds`);
console.log(`Speed: ${speed} MB/s`);
}
// 使用示例
uploadFolder('path/to/local/folder', 'path/to/remote/folder')
.catch(err => console.error(err));
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
请注意,上述代码中的client.put
方法不会直接提供上传进度,但你可以通过监听流的事件来获取进度信息。如果需要实时进度更新,你可能需要包装client.put
或使用类似的方法来跟踪上传的字节数和总字节数。
此外,计算上传速度的逻辑可能需要根据实际情况进行调整,因为它使用了简单的起始和结束时间来估算总上传时间,并不一定准确反映实际网络传输速度。
上次更新: 2024/04/07, 16:22:38
- 01
- Node与GLIBC_2.27不兼容解决方案08-19
- 02
- Git清空本地文件跟踪缓存08-13