Todos os produtos
Search
Central de documentação

Object Storage Service:How do I restore multiple objects at a time?

Última atualização: Oct 10, 2026

Se você não ativar o acesso em tempo real a objetos Archive, só poderá acessá-los após restaurá-los. O console do Object Storage Service (OSS) permite restaurar apenas um objeto por vez, o que impede a restauração simultânea de vários objetos em um diretório. Para restaurar múltiplos objetos ao mesmo tempo, use outros métodos. Este tópico descreve como restaurar vários objetos em lote.

Solução

Para restaurar vários objetos em um bucket ao mesmo tempo, siga as etapas a seguir:

  1. Liste todos os objetos.

    • Recomendamos o uso do recurso de inventário de bucket para listar os objetos. Para mais informações, consulte Bucket inventory.

    • Também é possível listar objetos chamando a operação ListObjects. No entanto, essa operação gera custos maiores em comparação à listagem baseada em inventário. Para mais informações, consulte List objects e Request fees.

  2. Se você usar o recurso de inventário de bucket para listar os objetos, filtre aqueles cujo StorageClass seja Archive na lista retornada e registre os caminhos completos dos objetos, excluindo o nome do bucket.

    Nota

    Se você listar objetos usando os SDKs do OSS, use a combinação de Key e StorageClass para obter os caminhos dos objetos e suas respectivas classes de armazenamento. O código de exemplo a seguir retorna o caminho do objeto "s" e sua classe de armazenamento.

    System.out.println("fileurl"+s.getKey()+"&stu:"+s.getStorageClass());
  3. Restaure os objetos nos caminhos correspondentes simultaneamente. Use um dos métodos a seguir para restaurar múltiplos objetos em lote. Para mais informações, consulte Restore objects.

    • ossutil: Em comparação com os outros dois métodos, o ossutil é mais simples e eficiente, caso você tenha familiaridade com operações de linha de comando.

    • API do OSS: A API do OSS não possui uma operação específica para restaurar vários objetos simultaneamente. Você precisa chamar a operação RestoreObject para cada objeto a ser restaurado e escrever o código para calcular a assinatura ao chamar a operação. Recomendamos o uso da API do OSS quando sua aplicação exige um alto nível de personalização.

    • SDKs do OSS: O uso dos SDKs do OSS é mais complexo que o ossutil e exige capacidade de leitura e modificação de código, que você compila e executa no dispositivo local. Por outro lado, os SDKs do OSS oferecem melhor reutilização de código. Mais adiante neste tópico, há um exemplo de código que demonstra como restaurar vários objetos ao mesmo tempo usando o SDK do OSS para Java.

    Exemplo em Java

    Informações adicionais

    O código de exemplo em Java fornecido no tópico Restaurar objetos restaura apenas um único objeto. Para restaurar vários objetos ao mesmo tempo, substitua a variável objectName no código de exemplo por uma variável do tipo lista que armazene os caminhos dos objetos a serem restaurados. O código a seguir é uma modificação do exemplo original para permitir a restauração em lote.

    Nota

    Para verificar se a restauração foi concluída, siga as etapas em How to check whether an OSS object is restored.

    Se você quiser restaurar objetos Cold Archive ou Deep Cold Archive, consulte 简介 e clique em Restore objects para acessar o tópico correspondente.

    import com.aliyun.oss.*;
    import com.aliyun.oss.common.auth.*;
    import com.aliyun.oss.common.comm.SignVersion;
    import com.aliyun.oss.model.*;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Demo {
        public static void main(String[] args) throws Exception {
            // In this example, the endpoint of the China (Beijing) region is used. Specify your actual endpoint. 
            String endpoint = "oss-cn-beijing.aliyuncs.com";
            // Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou.
            String region = "cn-hangzhou";
            // 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. 
            EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
            // Specify the name of the bucket. Example: examplebucket. 
            String bucketName = "examplebucket";
            // Create a list of the full paths of the Archive objects to restore. Do not include the bucket name in the full paths of the objects. 
            List<String> filePaths = new ArrayList<>();
            filePaths.add("filePath1");
            filePaths.add("filePath2");
    
            // Create an OSSClient instance.
            // Call the shutdown method to release resources when the OSSClient is no longer in use. 
            ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
            // Explicitly declare the use of the V4 signature algorithm.
            clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
            OSS ossClient = OSSClientBuilder.create()
                    .endpoint(endpoint)
                    .credentialsProvider(credentialsProvider)
                    .clientConfiguration(clientBuilderConfiguration)
                    .region(region)
                    .build();
    
            try {
                for (String filePath : filePaths) {
                    ObjectMetadata objectMetadata = ossClient.getObjectMetadata(bucketName, filePath);
                    // Check whether the objects are Archive objects. 
                    StorageClass storageClass = objectMetadata.getObjectStorageClass();
                    if (storageClass == StorageClass.Archive) {
                        // Restore the objects. 
                        ossClient.restoreObject(bucketName, filePath);
                    }
                    System.out.println(filePath+" start thawing.");
                }
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }
    

Referências