サイズが5 GBを超える大きなオブジェクトをobject Storage Service (OSS) からローカルコンピューターにダウンロードすると、ネットワークの中断やプログラムのクラッシュにより、オブジェクトのダウンロードに失敗することがあります。 複数回の再試行後にオブジェクトのダウンロードに失敗した場合、再開可能なダウンロードを実行してラージオブジェクトをダウンロードできます。 オブジェクトを複数のパーツに分割し、パーツを並行してダウンロードして、ダウンロードを高速化できます。 再開可能なダウンロード中、ダウンロードの進行状況はチェックポイントファイルに記録されます。 パーツのダウンロードに失敗した場合、次のダウンロードはチェックポイントファイルに記録されている位置から開始されます。 すべてのパーツがダウンロードされると、すべてのパーツが完全なオブジェクトに結合されます。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba Cloudサービスを使用してOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSでサポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSTS (Security Token Service) を使用してOSSClientインスタンスを作成する場合は、「初期化」をご参照ください。
再開可能ダウンロードを使用するには、
oss:GetObject
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。再開可能なダウンロード中、ダウンロードの進行状況はチェックポイントファイルに記録されます。 パーツのダウンロードに失敗した場合、次のダウンロードはチェックポイントファイルに記録されている位置から開始されます。 チェックポイントファイルは、再開可能なダウンロードが完了すると削除されます。
OSS SDK for Goは、ダウンロードの進行状況をチェックポイントファイルに記録します。 チェックポイントファイルへの書き込み権限があることを確認してください。
チェックポイントファイルに含まれるチェックサムは変更できません。 チェックポイントファイルが破損している場合は、すべてのパーツを再度ダウンロードする必要があります。
オブジェクトのETagに一貫性がない場合、またはダウンロード中にパーツが失われたり変更されたりした場合は、オブジェクトを再度ダウンロードする必要があります。
例
パッケージメイン
import (import (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)
}
// Create an OSSClient instance.
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。
client, err := oss.New("https://oss-cn-hangzhou.aliyuncs.com", ", ", ", oss.SetCredentialsProvider(&provider))
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)
}
// オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。
// ローカルファイルのフルパスを指定します。 例: D :\\ localpath\\examplefile.txt。 ローカルファイルのパスを指定しない場合、ダウンロードしたオブジェクトは、サンプルプログラムが属するプロジェクトのパスに保存されます。
// ダウンロードする各パーツのサイズを100 KB (100x1024) に設定し、同時ダウンロードパーツの数を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)
}
}