再開可能アップロードを使用すると、アップロードするファイルを複数のパーツに分割して同時にアップロードします。 すべてのパーツをアップロードしたら、各パーツを組み合わせて完全なオブジェクトにすることができます。 このようにして、オブジェクト全体のアップロードを完了させます。

現在のアップロードの進行状況は、アップロード中にチェックポイントファイルに記録されます。 処理中にパーツのアップロードに失敗した場合、オブジェクトはアップロードの再開時にチェックポイントファイルに記録されているパーツとなる、再開可能なアップロードからアップロードされます。 アップロードが完了すると、チェックポイントは削除されます。

  • SDK はアップロードの進行状況情報をチェックポイントファイルに記録します。 プログラムにチェックポイントファイルへの書き込み権限があることを確認する必要があります。 検証情報が含まれているため、チェックポイントファイルを変更しないでください。 チェックポイントファイルが破損している場合は、すべてのパーツが再度アップロードされます。
  • ファイルのアップロード中にローカルファイルが変更された場合は、すべてのパーツが再度アップロードされます。

再開可能アップロードを行うために、Bucket.UploadFile を使います。 以下のパラメーターを設定します。

パラメーター 説明
objectKey OSS にアップロードされたオブジェクトの名前を指定します。
filePath ローカルファイルのパスを指定します。
partSize アップロードパーツのサイズを 100 KB から 5 GB の範囲で指定します。
options 以下のオプションを指定します。
  • ルーチン: 同時にアップロードされるパーツの数を指定します。 既定値は 1 です。これは、パーツが同時にアップロードされないことを意味します。
  • チェックポイント: 再開可能アップロードを有効にするかどうかを指定し、チェックポイントファイルを構成します。 再開可能アップロードは既定では無効になっています。 たとえば、oss.Checkpoint(true, "")は 再開可能アップロードが有効であり、チェックポイントファイルはローカルファイルのアップロードが必要なディレクトリに格納されている file.cp です。 file はローカルファイルの名前です。 チェックポイントファイルを指定するために oss.Checkpoint(true, "your-cp-file.cp") を使用することもできます。
  • その他のメタデータ情報: 「オブジェクトメタの管理」をご参照ください。

再開可能アップロードを行うには、次のコードを実行します。

package main

import (
	"fmt"
	"os"
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Create an OSSClient instance.
	client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
	if err ! = nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Obtain the bucket.
	bucket, err := client.Bucket("<yourBucketName>")
	if err ! = nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// The part size is 100 KB. Parts are uploaded through three coroutines concurrently. The resumable upload is enabled.
	// <yourObjectName>" is the objectKey, "LocalFile" is the filePath, and 100*1024 is the partSize.
	err = bucket.UploadFile("<yourObjectName>", "LocalFile", 100*1024, oss.Routines(3), oss.Checkpoint(true, ""))
	if err ! = nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
}