Tous les produits
Search
Centre de documentation

Object Storage Service:Téléchargement par plage (SDK C++)

Dernière mise à jour :Sep 22, 2026

Si vous n'avez besoin que d'une partie des données d'un fichier, utilisez un téléchargement par plage pour récupérer une plage de données spécifique.

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 qu'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 via des identifiants du Security Token Service (STS), consultez Créer une instance OssClient.

  • Pour effectuer un téléchargement par plage, vous devez disposer de l'autorisation oss:GetObject. Pour plus d'informations, consultez Accorder une politique personnalisée.

Spécifier une plage de téléchargement valide

L'exemple de code suivant montre comment spécifier une plage valide pour télécharger des données :

#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, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com for a bucket in the China (Hangzhou) region. */
    std::string Endpoint = "yourEndpoint";
    /* Set yourRegion to the region where the bucket is located. For example, set the region to cn-hangzhou for a bucket in the China (Hangzhou) region. */
    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";

     /* Initialize network resources. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Obtain access credentials from environment variables. Before you run this sample code, make sure that 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);

    /* Get the file. */
    GetObjectRequest request(BucketName, ObjectName);
    /* Set the download range. */
    request.setRange(0, 1);
    auto outcome = client.GetObject(request);

    if (!outcome.isSuccess ()) {    
        /* Handle the exception. */
        std::cout << "getObject fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
         return -1;  
    }

    /* Release network resources. */
    ShutdownSdk();
    return 0;
}

Spécifier une plage non valide pour le téléchargement de données

Pour un objet dont la taille est de 1 000 octets, la plage valide s'étend de l'octet 0 à l'octet 999. Si la plage spécifiée ne se situe pas entre l'octet 0 et l'octet 999, elle n'est pas prise en compte. Dans ce cas, OSS renvoie le code d'état HTTP 200 et les données de l'objet entier. Les exemples suivants illustrent des requêtes non valides et les résultats renvoyés :

  • Si vous définissez Range: bytes sur 500-2000, la valeur de fin de plage est non valide. Dans ce cas, OSS renvoie le code d'état HTTP 200 et les données de l'objet entier.

  • Si vous définissez Range: bytes sur 1000-2000, la valeur de début de plage est non valide. Dans ce cas, OSS renvoie le code d'état HTTP 200 et les données de l'objet entier.

Comportement standard pour les téléchargements par plage

Si vous ajoutez x-oss-range-behavior:standard à l'en-tête de la requête, le comportement de téléchargement est modifié lorsque la plage spécifiée ne se trouve pas dans la plage valide. Pour un objet dont la taille est de 1 000 octets :

  • Si vous définissez Range: bytes sur 500-2000, la valeur de fin de plage est non valide. Dans ce cas, OSS renvoie le code d'état HTTP 206 et les données comprises entre l'octet 500 et l'octet 999.

  • Si vous définissez Range: bytes sur 1000-2000, la valeur de début de plage est non valide. Dans ce cas, OSS renvoie le code d'état HTTP 416 et le code d'erreur InvalidRange.

L'exemple de code suivant montre comment spécifier le comportement standard pour télécharger des données par plage :

#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, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com for a bucket in the China (Hangzhou) region. */
    std::string Endpoint = "yourEndpoint";
    /* Set yourRegion to the region where the bucket is located. For example, set the region to cn-hangzhou for a bucket in the China (Hangzhou) region. */
    std::string Region = "yourRegion";
    /* Specify the bucket name. For example, examplebucket. */
    std::string BucketName = "examplebucket";
    /* Specify a file that is 1000 bytes in size. */
    /* Specify the full path of the object. The full path cannot contain the bucket name. For example, exampledir/exampleobject.txt. */
    std::string ObjectName = "yourObjectName";

     /* Initialize network resources. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Obtain access credentials from environment variables. Before you run this sample code, make sure that 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);

    /* Get the file. */
    GetObjectRequest request(BucketName, ObjectName);
    /* Set the download range. */    
    /* The end of the range is outside the valid interval. The content from byte 500 to 999 is returned, and the HTTP status code is 206. */
    request.setRange(500, 2000, true);
    auto outcome = client.GetObject(request);

    /* The start of the range is outside the valid interval. An exception is thrown. The HTTP status code 416 is returned with the InvalidRange error code. */
    request.setRange(1000, 2000, true);
    outcome = client.GetObject(request);

    if (!outcome.isSuccess ()) {    
        /* Handle the exception. */
        std::cout << "getObject fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
         return -1;  
    }

    /* Release network resources. */
    ShutdownSdk();
    return 0;
}

Références

Pour plus d'informations sur l'opération API relative aux téléchargements par plage, consultez GetObject.