Lorsque vous téléchargez un objet vers Object Storage Service (OSS) à l'aide du téléchargement avec reprise, vous pouvez spécifier un répertoire pour le fichier de point de contrôle qui enregistre la progression du téléchargement. Si le téléchargement d'un objet échoue en raison d'une exception réseau ou d'une erreur de programme, la tâche de téléchargement reprend à partir de la position enregistrée dans le fichier de point de contrôle.
Notes
Cette rubrique utilise l'endpoint public de la région Chine (Hangzhou). Si vous souhaitez accéder à OSS depuis d'autres services Alibaba Cloud situés dans la même région que OSS, utilisez un endpoint interne. Pour plus d'informations sur les régions et les endpoints OSS, consultez Régions et endpoints.
Cette rubrique explique comment créer une instance OSSClient avec un endpoint OSS. Pour d'autres configurations, telles que l'utilisation d'un domaine personnalisé ou l'authentification avec des identifiants issus du Security Token Service (STS), consultez Créer une instance OssClient.
Pour utiliser le téléchargement avec reprise, vous devez disposer de l'autorisation
oss:PutObject. Pour plus d'informations, consultez Accorder une politique personnalisée.Lorsque vous utilisez le téléchargement avec reprise, la progression du téléchargement est enregistrée dans un fichier de point de contrôle. Si le téléchargement d'une partie échoue, le téléchargement reprend à partir du point enregistré dans ce fichier. Une fois le téléchargement terminé, le fichier de point de contrôle est supprimé.
Le fichier de point de contrôle contient une somme de contrôle qui ne doit pas être modifiée. Si le fichier est endommagé, retéléchargez toutes les parties.
Si le fichier local change pendant le téléchargement, retéléchargez toutes les parties.
Implémentation
Utilisez la méthode client.ResumableUploadObject pour effectuer un téléchargement avec reprise. L'objet UploadObjectRequest utilisé dans cette méthode contient les paramètres suivants :
|
Paramètre |
Description |
Obligatoire |
Valeur par défaut |
Configuration |
|
bucket |
Le nom du bucket. |
Oui |
Aucune |
Défini dans le constructeur. |
|
key |
Le nom du fichier à télécharger vers OSS. |
Oui |
Aucune |
|
|
filePath |
Le nom du fichier local à télécharger. |
Non |
Aucune |
|
|
partSize |
La taille de chaque partie. La valeur doit être comprise entre 100 Ko et 5 Go. |
Non |
8 Mo |
Utilisez setPartSize. |
|
threadNum |
Le nombre de threads simultanés pour le téléchargement multipartie. |
Non |
3 |
Défini dans le constructeur ou utilisez setThreadNum. |
|
checkpointDir |
Le fichier qui enregistre la progression du téléchargement. Si un téléchargement est interrompu, il reprend à partir du point enregistré dans ce fichier. Le fichier est supprimé une fois le téléchargement terminé. |
Non |
Le même dossier que DownloadFile. |
Défini dans le constructeur ou utilisez setCheckpointDir. |
Exemple de code
L'exemple de code suivant montre comment effectuer un téléchargement avec reprise :
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Initialize OSS account information. */
/* Set yourEndpoint to the endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Set yourRegion to the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the region to cn-hangzhou. */
std::string Region = "yourRegion";
/* Specify the bucket name, for example, examplebucket. */
std::string BucketName = "examplebucket";
/* Specify the full path of the object. The full path cannot contain the bucket name. For example, exampledir/exampleobject.txt. */
std::string ObjectName = "exampledir/exampleobject.txt";
/* Specify the full path of the local file, for example, D:\\localpath\\examplefile.txt. If you do not specify a local path, the file is uploaded from the local path that corresponds to the project where the sample program is located. */
std::string UploadFilePath = "D:\\localpath\\examplefile.txt";
/* The file that records the results of local part uploads. The upload progress is saved in this file. If a part fails to upload, the next upload attempt resumes from the breakpoint recorded in the file. After the upload is complete, this file is deleted. */
/* Set the directory where the checkpoint file is stored and make sure the specified directory exists, for example, D:\\local. If this value is not set, checkpoint information is not recorded and resumable upload is not used. */
std::string CheckpointFilePath = "D:\\local";
/* Initialize network and other resources. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Obtain access credentials from environment variables. Before running this sample code, make sure the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* Perform a 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 network and other resources. */
ShutdownSdk();
return 0;
}
Références
Pour obtenir l'exemple de code complet relatif au téléchargement avec reprise, consultez Exemple GitHub.