Todos os produtos
Search
Central de documentação

Object Storage Service:Download resumível (C++ SDK)

Última atualização: Sep 22, 2026

O download de objetos grandes pode falhar quando a rede está instável ou outras exceções ocorrem. Em alguns casos, a falha persiste mesmo após várias tentativas. Para resolver esse problema, o Object Storage Service (OSS) oferece o recurso de download resumível. Nesse tipo de download, o OSS divide o objeto em várias partes e baixa cada uma separadamente. Após o download de todas as partes, o OSS as combina em um objeto completo.

Observações

  • Este tópico usa o endpoint público da região China (Hangzhou). Para acessar o OSS a partir de outros serviços Alibaba Cloud na mesma região, use um endpoint interno. Para mais informações sobre regiões e endpoints do OSS, consulte Regions and endpoints.

  • Este tópico demonstra como criar uma instância OSSClient com um endpoint do OSS. Para configurações alternativas, como usar um domínio personalizado ou autenticar com credenciais do Security Token Service (STS), consulte Create an OssClient instance.

  • Para usar o download resumível, você precisa da permissão oss:GetObject. Para mais informações, consulte Grant a custom policy.

Método de implementação

Use o método OssClient.ResumableDownloadObject para executar um download resumível. O DownloadObjectRequest desse método inclui os seguintes parâmetros:

Parâmetro

Descrição

Obrigatório

Valor padrão

Como definir

bucket

Nome do bucket.

Sim

Nenhum

Defina no construtor.

key

Caminho completo do arquivo no OSS.

Sim

Nenhum

Defina no construtor.

filePath

Caminho completo do arquivo local.

Não

Nome do arquivo no OSS

Defina no construtor.

partSize

Tamanho do fragmento. O valor deve estar entre 100 KB e 5 GB.

Não

8 MB

Configure por meio de setPartSize.

threadNum

Número de downloads simultâneos de fragmentos.

Não

3

Informe no construtor ou por meio de setThreadNum.

checkpointDir

Arquivo que registra os resultados do download local dos fragmentos. Defina este parâmetro para ativar o recurso de download resumível. As informações de progresso são salvas nesse arquivo durante o download. Se o download de um fragmento falhar, a próxima tentativa será retomada a partir do ponto registrado no arquivo. Após a conclusão do download, esse arquivo é excluído.

Não

Mesma pasta do arquivo de download.

Informe no construtor ou por meio de setCheckpointDir.

Exemplo de código

O código a seguir mostra como executar um download resumível:

#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 ID of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the Region ID 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";
    /* Download the object to a local file named examplefile.txt and save it to the specified local path (D:\\localpath). If the local file exists, it is overwritten. If it does not exist, it is created. */
    /* If you do not specify a local path, the downloaded file is saved to the local path of the project by default. */
    std::string DownloadFilePath = "D:\\localpath\\examplefile.txt";
    /* Set the folder for the breakpoint record file and make sure the specified folder exists, for example, D:\\localpath. */
    /* If an object download is interrupted and a breakpoint record file is generated, you must set the corresponding breakpoint record file to resume the download. After the download is complete, this file is deleted. */
    std::string CheckpointFilePath = "D:\\localpath";

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

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

    /* Perform a resumable download. */
    DownloadObjectRequest request(BucketName, ObjectName, DownloadFilePath, CheckpointFilePath);
    auto outcome = client.ResumableDownloadObject(request);

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

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

Referências

  • Para obter o código de exemplo completo de downloads resumíveis, acesse GitHub sample.

  • Para mais informações sobre a operação de API para downloads resumíveis, consulte GetObject.