すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:再開可能なダウンロード (Go SDK V1)

最終更新日:Nov 29, 2025

Object Storage Service (OSS) の大容量ファイル (5 GB 超) をローカルデバイスにダウンロードする際に、ダウンロードが失敗することがあります。これは、ネットワークの中断や予期しないプログラムの終了が原因で発生する可能性があります。複数回再試行してもダウンロードが失敗し続ける場合は、再開可能なダウンロードを使用できます。再開可能なダウンロードでは、大容量ファイルをより小さなシャードに分割し、それらを同時にダウンロードすることでプロセスを高速化します。シャードのダウンロードに失敗した場合、次の試行はチェックポイントファイルに記録されたブレークポイントから再開されます。ファイル全体を再ダウンロードする必要はありません。ダウンロードが完了すると、すべてのシャードがマージされ、1 つの完全なファイルになります。

注意事項

  • このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。OSS と同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用してください。OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • このトピックでは、アクセス認証情報は環境変数から取得されます。アクセス認証情報の設定方法の詳細については、「アクセス認証情報の設定」をご参照ください。

  • このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「クライアントの設定 (Go SDK V1)」をご参照ください。

  • 再開可能なダウンロードを実行するには、oss:GetObject 権限が必要です。詳細については、「RAM ユーザーへのカスタムポリシーのアタッチ」をご参照ください。

  • 再開可能なダウンロードを使用すると、ダウンロードの進捗状況がチェックポイントファイルに記録されます。シャードのダウンロードに失敗した場合、次の試行はチェックポイントファイルに記録されたブレークポイントから再開されます。ダウンロードが完了すると、チェックポイントファイルは削除されます。

  • SDK は、ダウンロードのステータスをチェックポイントファイルに記録します。プログラムがこのファイルへの書き込み権限を持っていることを確認してください。

  • チェックポイントファイル内の検証情報を変更しないでください。チェックポイントファイルが破損している場合、ファイル全体が再度ダウンロードされます。

  • ファイルの ETag が変更された場合、またはダウンロード中にシャードが失われたり変更されたりした場合、ファイル全体が再度ダウンロードされます。

サンプルコード

package main

import (
	"fmt"
	"os"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// OSSClient インスタンスを作成します。
	// yourEndpoint をバケットのエンドポイントに設定します。たとえば、中国 (杭州) リージョンのバケットの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、実際のエンドポイントを使用してください。
	// yourRegion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンのバケットの場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、実際のリージョンを使用してください。
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// 署名バージョンを設定します。
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// バケット名を指定します (例: examplebucket)。
	bucket, err := client.Bucket("examplebucket")
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// yourObjectName をオブジェクトの完全なパスに設定します。完全なパスにバケット名を含めることはできません。たとえば、exampledir/exampleobject.txt に設定します。
	// yourLocalFile をローカルファイルの完全なパスに設定します (例: D:\\localpath\\examplefile.txt)。ローカルパスを指定しない場合、ダウンロードされたファイルはサンプルプログラムが配置されているプロジェクトのローカルパスに保存されます。
	// シャードサイズを 100 KB (100 * 1024) に、同時ダウンロードスレッド数を 3 に設定します。
	// oss.Checkpoint(true, "") は再開可能なダウンロードを有効にします。デフォルトでは、ブレークポイントを記録するチェックポイントファイルは、ダウンロードされたローカルファイルと同じフォルダーにあります。チェックポイントファイルはローカルファイルと同じ名前ですが、拡張子は .temp です。oss.Checkpoint(true, "your-cp-file.temp") を使用してチェックポイントファイルを指定することもできます。
	err = bucket.DownloadFile("file.zip", "D:\\file.zip", 100*1024, oss.Routines(3), oss.Checkpoint(true, ""))
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
}

関連ドキュメント

  • 再開可能なダウンロードの完全なサンプルコードについては、GitHub の例をご参照ください。

  • 再開可能なダウンロードの API 操作の詳細については、「GetObject」をご参照ください。