断点续传上传是指将要上传的文件分成若干个分片(Part)分别上传,所有分片都上传完成后,将所有分片合并成完整的文件,完成整个文件的上传。

    在上传的过程中会在Checkpoint文件中记录当前上传的进度信息,如果上传过程中某一分片上传失败,再次上传时会从Checkpoint文件中记录的点继续上传,从而达到断点续传的效果。上传完成后,Checkpoint文件会被删除。

    说明

    • SDK会将上传的中间状态信息记录在Checkpoint文件中,所以要确保程序对Checkpoint文件有写权限。Checkpoint携带了校验信息,请不要修改。如果Checkpoint文件损坏则会重新上传所有分片。
    • 如果上传过程中本地文件发生了改变,则会重新上传所有分片。

    您可以使用Bucket.UploadFile实现断点续传。可设置的参数如下:

    参数说明
    objectKey上传到OSS的文件名称。
    filePath待上传的本地文件路径。
    partSize分片上传大小,取值范围为100KB~5GB。
    options可选项,包括:
    - Routines:指定分片上传的并发数。默认是1,即不使用并发上传。
    - Checkpoint:指定是否开启断点续传功能以及设置Checkpoint文件。默认关闭断点续传功能。例如oss.Checkpoint(true, ""), 表示开启断点续传功能,并且Checkpoint文件为与本地文件同目录下的file.cp,其中file是本地文件名称。您也可以使用oss.Checkpoint(true, "your-cp-file.cp")指定Checkpoint文件。
    - 其它元信息:请参见设置文件元信息

    以下代码用于断点续传上传:

    1. package main
    2. import (
    3. "fmt"
    4. "os"
    5. "github.com/aliyun/aliyun-oss-go-sdk/oss"
    6. )
    7. func main() {
    8. // 创建OSSClient实例。
    9. client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
    10. if err != nil {
    11. fmt.Println("Error:", err)
    12. os.Exit(-1)
    13. }
    14. // 获取存储空间。
    15. bucket, err := client.Bucket("<yourBucketName>")
    16. if err != nil {
    17. fmt.Println("Error:", err)
    18. os.Exit(-1)
    19. }
    20. // 分片大小100K,3个协程并发上传分片,使用断点续传。
    21. // 其中"<yourObjectName>"为objectKey, "LocalFile"为filePath,100*1024为partSize。
    22. err = bucket.UploadFile("<yourObjectName>", "LocalFile", 100*1024, oss.Routines(3), oss.Checkpoint(true, ""))
    23. if err != nil {
    24. fmt.Println("Error:", err)
    25. os.Exit(-1)
    26. }
    27. }