详细解答可以参考官方帮助文档
当下载大文件时,如果网络不稳定或者程序崩溃了,则整个下载就失败了。用户
不得不重头再来,这样做不仅浪费资源,在网络不稳定的情况下,往往重试多次
还是无法完成下载。
通过Bucket.DownloadFile
接口来实现断点续传下载。它有以下参数:
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)
,默认不使用分片并发下载、不启动断点续传
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。