go sdk checkpoint
详细解答可以参考官方帮助文档当下载大文件时,如果网络不稳定或者程序崩溃了,则整个下载就失败了。用户
不得不重头再来,这样做不仅浪费资源,在网络不稳定的情况下,往往重试多次
还是无法完成下载。
通过Bucket.DownloadFile接口来实现断点续传下载。它有以下参数:
objectKey 要下载的Object名字
filePath 下载到本地文件的路径
partSize 下载分片大小,从1B到5GB,单位是Byte
options 可选项,主要包括:
Routines 指定分片下载的并发数,默认是1,及不使用并发下载
Checkpoint 指定下载是否开启断点续传,及checkpoint文件的路径。默认断点续传功能关闭,checkpoint文件的路径可以指定为空,如果不指定则默认为与本地文件同
目录下的file.cpt,其中file是本地文件的名字
下载时限定条件,请参看指定限定条件下载
其实现的原理是将要下载的Object分成若干个分片分别下载,最后所有分片都下
载成功后,完成整个文件的下载。在下载的过程中会记录当前下载的进度信息
(记录在checkpoint文件中)和已下载的分片,如果下载过程中某一分片下载失败,再次下
载时会从checkpoint文件中记录的点继续下载。这要求再次调用时要指定与上次
相同的checkpoint文件。下载完成后,checkpoint文件会被删除。
import 'github.com/aliyun/aliyun-oss-go-sdk/oss'
client, err := oss.New('Endpoint', 'AccessKeyId', 'AccessKeySecret')
if err != nil {
// HandleError(err)
}
bucket, err := client.Bucket('my-bucket')
if err != nil {
// HandleError(err)
}
err = bucket.DownloadFile('my-object', 'LocalFile', 100*1024, oss.Routines(3), oss.Checkpoint(true, ''))
if err != nil {
// HandleError(err)
}
注意:
SDK会将下载的中间状态信息记录在cp文件中,所以要确保用户对cpt文
件有写权限
cpt文件记录了下载的中间状态信息并自带了校验,用户不能去编辑它,如
果cpt文件损坏则重新下载文件
如果下载过程中待下载的Object发生了改变(ETag改变),或者part文件丢
失或被修改,则重新下载文件
提示:
指定断点续传checkpoint文件路径使用oss.Checkpoint(true, 'your-cp-file.cp')
使用bucket.DownloadFile(objectKey, localFile, 100*1024),默认不使用分片并发下载、不启动断点续传
赞0
踩1