再開可能アップロードを使用してオブジェクトをobject Storage Service (OSS) にアップロードする場合、再開可能アップロードの進行状況を格納するチェックポイントファイルのディレクトリを指定できます。 ネットワーク例外またはプログラムエラーのためにオブジェクトのアップロードに失敗した場合、チェックポイントファイルに記録された位置からアップロードタスクが再開されます。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSecurity Token Service (STS) を使用してOSSClientを作成する場合は、「OSSClientインスタンスの作成」をご参照ください。
再開可能アップロードを使用するには、
oss:PutObject
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。再開可能なアップロード中、アップロードの進行状況はチェックポイントファイルに記録されます。 パーツのアップロードに失敗した場合、次のアップロードはチェックポイントファイルに記録された位置から開始されます。 チェックポイントファイルは、再開可能なアップロードタスクが完了すると削除されます。
アップロードの進行状況はチェックポイントファイルに記録されます。 チェックポイントファイルへの書き込み権限があることを確認してください。
チェックポイントファイルにはチェックサムが含まれています。 このチェックサムは変更できません。 チェックポイントファイルが破損している場合は、オブジェクトのすべての部分を再アップロードする必要があります。
アップロード中にローカルファイルが変更された場合は、オブジェクトのすべての部分を再アップロードする必要があります。
実装方法
client.ResumableUploadObjectメソッドを使用して、再開可能なアップロードを実装できます。 次の表に、UploadObjectRequestに設定できるパラメーターを示します。
パラメーター | 説明 | 必須 / 任意 | デフォルト値 | 移動方法 |
バケット | バケットの名前です。 | 可 | なし | コンストラクター |
キー | OSSにアップロードされたオブジェクトの名前。 | 可 | なし | |
filePath | アップロードするローカルファイルの名前。 | ✕ | なし | |
partSize | 各部分のサイズ。 有効な値: 100 KB〜5 GB。 | 不可 | 8 MB | setPartSize |
threadNum | 同時にアップロードするパーツの数。 | 不可 | 3 | コンストラクタまたはsetThreadNum |
checkpointDir | マルチパートアップロードタスクの結果を記録するチェックポイントファイルのパス。 このファイルには、アップロードの進行状況に関する情報が格納されます。 パーツのアップロードに失敗した場合、チェックポイントファイルに記録された位置からタスクを再開できます。 ローカルファイルがアップロードされると、チェックポイントファイルは削除されます。 | 不可 | アップロードするローカルファイルが格納されているディレクトリ | コンストラクタまたはsetCheckpointDir |
サンプルコード
次のサンプルコードは、再開可能なアップロードを実行する方法の例を示します。
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Initialize information about the account that is used to access OSS. */
/* Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. */
std::string Region = "yourRegion";
/* Specify the name of the bucket. Example: examplebucket. */
std::string BucketName = "examplebucket";
/* Specify the full path of the object. Do not include the bucket name in the full path. Example: exampledir/exampleobject.txt. */
std::string ObjectName = "exampledir/exampleobject.txt";
/* Specify the full path of the local file. Example: D:\\localpath\\examplefile.txt. By default, if you do not specify the full path of a local file, the local file is uploaded from the path of the project to which the sample program belongs. */
std::string UploadFilePath = "D:\\localpath\\examplefile.txt";
/* Specify the checkpoint file. The upload progress information is stored in this file. If a part fails to be uploaded, the upload continues from the position recorded in the file. After the local file is uploaded, the checkpoint file is deleted. */
/* Specify the directory where the checkpoint file is stored and make sure that the specified directory exists, such as D:\\local. If you do not specify this parameter, this checkpoint file shares the same directory as the local file that you want to upload. */
std::string CheckpointFilePath = "D:\\local";
/* Initialize resources such as network resources. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* Start resumable upload. */
UploadObjectRequest request(BucketName, ObjectName, UploadFilePath, CheckpointFilePath);
auto outcome = client.ResumableUploadObject(request);
if (!outcome.isSuccess()) {
/* Handle exceptions. */
std::cout << "ResumableUploadObject fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* Release resources such as network resources. */
ShutdownSdk();
return 0;
}
関連ドキュメント
再開可能アップロードの実行に使用される完全なサンプルコードについては、『GitHub』をご参照ください。