ssh2-sftp-client实现断点续传

之前使用ssh2-sftp-client来实现了终端文件上下载,同时因为支持流方式,所以做到了分片上传和下载,同时也就有了进度条。但传输时候网路是有不确定性的随时中断,那么就需要断点续传。这里了解了下ssh2-sftp-client的实现,发现实际上支持断点是具备可行性的。

put/get方法

put/get方法的第三个参数是options。其中有writeStreamOptions/readStreamOptions。这两个对象仔细查看定义,会发现其中有一个start参数,这个参数表示从哪个位置开始传输。

有了这个参数,就可以实现断点续传了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
export interface ReadStreamOptions extends ReadableOptions {
flags?: OpenMode;
mode?: number;
start?: number;
end?: number;
autoClose?: boolean;
handle?: Buffer;
}

export interface WriteStreamOptions extends WritableOptions {
flags?: OpenMode;
mode?: number;
start?: number;
autoClose?: boolean;
handle?: Buffer;
encoding?: BufferEncoding;
}

理论上的实现

以上传为例,传输成功后,前端记录下已传输的位置,确定断点位置。这样假如说网络终端,下次传输还是以断点位置开始传输即可,本质来说,断点传输跟分片传输其实是一样的。