开发者社区> 问答> 正文

go sdk 分片大小设置范围

已解决

展开
收起
游客vhs3soe6ngjkc 2018-07-20 06:21:19 741 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

    详细解答可以参考官方帮助文档

    当下载大文件时,如果网络不稳定或者程序崩溃了,则整个下载就失败了。用户 不得不重头再来,这样做不仅浪费资源,在网络不稳定的情况下,往往重试多次 还是无法完成下载。 通过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),默认不使用分片并发下载、不启动断点续传
    2018-07-26 18:26:22
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
跨平台的云服务SDK需要什么 立即下载
RocketMQ Client-GO 介绍 立即下载
一个跨平台的云服务SDK需要什么 立即下载

相关实验场景

更多