再開可能なアップロードを使用すると、5 GB を超えるファイルを Object Storage Service (OSS) にアップロードできます。このメソッドは、ネットワークの中断やプログラムのエラーによるアップロードの失敗を防ぎます。大きいファイルを複数のシャードに分割して同時にアップロードすることで、プロセスを高速化します。シャードのアップロードに失敗した場合、チェックポイントファイルに記録されたブレークポイントからプロセスを再開できます。すべてのシャードを再アップロードする必要はありません。すべてのシャードがアップロードされると、OSS はそれらを自動的に 1 つのファイルにマージします。
注意事項
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。OSS と同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用します。OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス認証情報は環境変数から取得されます。アクセス認証情報の設定方法の詳細については、「アクセス認証情報の設定」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「クライアントの設定 (Go SDK V1)」をご参照ください。
再開可能なアップロードを実行するには、
oss:PutObject権限が必要です。詳細については、「RAM ユーザーへのカスタムポリシーのアタッチ」をご参照ください。SDK はアップロードステータスをチェックポイントファイルに記録します。プログラムにチェックポイントファイルへの書き込み権限があることを確認してください。
チェックポイントファイル内の検証情報を変更しないでください。チェックポイントファイルが破損している場合、すべてのシャードが再アップロードされます。
アップロード中にローカルファイルが変更された場合、すべてのシャードが再アップロードされます。
実装方法
Bucket.UploadFile メソッドを呼び出して、再開可能なアップロードを実行します。次のパラメーターとオプションを設定できます:
パラメーター | 説明 |
objectKey | OSS にアップロードするファイルの名前です。これは objectName と同じです。 |
filePath | アップロードするローカルファイルのパスです。 |
partSize | 各シャードのサイズです。値は 100 KB から 5 GB の範囲である必要があります。デフォルト値は 100 KB です。 |
options | 次のオプションが含まれます:
説明 詳細については、「ファイルメタデータの設定」をご参照ください。 |
サンプルコード
次のコードは、再開可能なアップロードを実行する方法の例を示しています。
package main
import (
"log"
"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 {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// 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 {
log.Fatalf("Failed to create OSS client: %v", err)
}
// バケット名を指定します (例: examplebucket)。
bucket, err := client.Bucket("examplebucket")
if err != nil {
log.Fatalf("Failed to get bucket: %v", err)
}
// UploadFile を使用して再開可能なアップロードを実行する場合、シャードの数は 10,000 を超えることはできません。
// アップロードするファイルのサイズに基づいて、各シャードのサイズを設定する必要があります。各シャードのサイズは 100 KB から 5 GB の範囲で指定できます。デフォルト値は 100 KB (100 * 1024 バイト) です。
// oss.Routines を使用して、3 つのシャードを同時にアップロードするように指定します。
// yourObjectName をオブジェクトの完全なパスに設定します。完全なパスにバケット名を含めることはできません。例:exampledir/exampleobject.txt。
// yourLocalFile をローカルファイルの完全なパスに設定します (例: D:\\localpath\\examplefile.txt)。ローカルパスが指定されていない場合、ファイルはサンプルプログラムのプロジェクトのデフォルトパスからアップロードされます。
err = bucket.UploadFile("exampledir/exampleobject.txt", "D:\\localpath\\examplefile.txt", 100*1024, oss.Routines(3), oss.Checkpoint(true, ""))
if err != nil {
log.Fatalf("Failed to upload file: %v", err)
}
log.Println("File uploaded successfully.")
}
よくある質問
再開可能なアップロード中に「Too many parts, Please increase part size.」というエラーが発生した場合はどうすればよいですか?
関連ドキュメント
再開可能なアップロードの完全なサンプルコードについては、「GitHub サンプル」をご参照ください。
再開可能なアップロードの API 操作の詳細については、「UploadFile」をご参照ください。