Manipulação de recursos do Spring Cloud Azure

Este artigo aplica-se a: ✔️ Versão 4.14.0 Versão 5.8.0 ✔️

O projeto Spring fornece uma abstração de recursos do Spring para acessar vários recursos de baixo nível. O projeto fornece interfaces como Resource, ResourceLoader e ResourcePatternResolver. O Spring Cloud Azure implementa essas interfaces para os serviços de Armazenamento do Azure, o que permite interagir com o Blob de armazenamento do Azure e o Compartilhamento de Arquivos usando o modelo de programação do Spring. O Spring Cloud Azure fornece spring-cloud-azure-starter-storage-blob e configura automaticamente o Blob de Armazenamento do Azure e spring-cloud-azure-starter-storage-file-share o Compartilhamento de Arquivos de Armazenamento do Azure.

A tabela a seguir lista as bibliotecas relacionadas ao Armazenamento do Azure:

Inicial Serviço Descrição
spring-cloud-azure-starter-storage-blob O Azure Storage Blob Permite que os dados não estruturados sejam armazenados e acessados em grande escala em blobs de blocos.
spring-cloud-azure-starter-storage-file-share Compartilhamento de Arquivos de Armazenamento do Azure Oferece compartilhamentos de arquivos de nuvem totalmente gerenciados que podem ser acessados de qualquer lugar por meio do protocolo SMB (Server Message Block) padrão do setor.

Configuração de dependência

<dependencies>
    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-storage-blob</artifactId>
    </dependency>
    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-storage-file-share</artifactId>
    </dependency>
</dependencies>

A spring-cloud-azure-starter-storage-blob dependência só é necessária quando você estiver usando o Blob de Armazenamento do Azure.

A spring-cloud-azure-starter-storage-file-share dependência só é necessária quando você estiver usando o Compartilhamento de Arquivos de Armazenamento do Azure.

Dica

Nós também fornecemos spring-cloud-azure-starter-storage suporte a todos os recursos de armazenamento. Se você optar por usá-lo, spring.cloud.azure.storage.enable é a propriedade a ser configurada e o valor padrão é true. Em seguida, você pode usar spring.cloud.azure.storage.<storage-service>.enable para desabilitar serviços desnecessários.

Configuração

Observação

Se você usar uma entidade de segurança para autenticar e autorizar com a ID do Microsoft Entra para acessar um recurso do Azure, verifique se a entidade de segurança recebeu permissão suficiente para acessar o recurso do Azure. Para obter mais informações, confira Autorizar o acesso com o Microsoft Entra ID.

A tabela a seguir lista as propriedades configuráveis de spring-cloud-azure-starter-storage-blob:

Propriedade Padrão Descrição
spring.cloud.azure.storage.blob.enabled true Um valor que indica se um serviço de Armazenamento de Blobs do Azure está habilitado.
primavera.cloud.azure.storage.blob.endpoint O URI para se conectar ao Armazenamento de Blobs do Azure.
spring.cloud.azure.storage.blob.account-key A chave privada para se conectar ao Armazenamento de Blobs do Azure.
spring.cloud.azure.storage.blob.nome-da-conta O nome da conta do Blob de Armazenamento do Azure.

A tabela a seguir lista as propriedades configuráveis de spring-cloud-azure-starter-storage-file-share:

Propriedade Padrão Descrição
spring.cloud.azure.storage.fileshare.enabled true Um valor que indica se o serviço de Armazenamento de Arquivos do Azure está habilitado.
primavera.cloud.azure.storage.fileshare.endpoint O URI para se conectar ao Armazenamento de Arquivos do Azure.
spring.cloud.azure.storage.fileshare.account-key A chave privada para se conectar ao Armazenamento de Arquivos do Azure.
spring.cloud.azure.storage.fileshare.nome-da-conta O nome da conta do Compartilhamento de Arquivos de Armazenamento do Azure.

Uso básico

Adicione as seguintes propriedades ao arquivo application.yml:

spring:
  cloud:
    azure:
      storage:
        blob:
          account-name: ${STORAGE_ACCOUNT_NAME}
          account-key: ${STORAGE_ACCOUNT_KEY}
          endpoint: ${STORAGE_BLOB_ENDPOINT}
        fileshare:
          account-name: ${STORAGE_ACCOUNT_NAME}
          account-key: ${STORAGE_ACCOUNT_KEY}
          endpoint:  ${STORAGE_FILESHARE_ENDPOINT}

Obter um recurso

Obtenha um recurso com @Value

Você pode usar a anotação de para conectar automaticamente um recurso de @Value("azure-blob://[your-container-name]/[your-blob-name]") blob, conforme mostrado no exemplo a seguir:

@Value("azure-blob://[your-container-name]/[your-blob-name]")
private Resource storageBlobResource;

Você pode usar a anotação de para conectar automaticamente um recurso de @Value("azure-file://[your-fileshare-name]/[your-file-name]") arquivo, conforme mostrado no exemplo a seguir:

@Value("azure-file://[your-fileshare-name]/[your-file-name]")
private Resource storageFileResource;

Obter um recurso com o ResourceLoader

@Autowired
private ResourceLoader resourceLoader;
...
// Get a BlobResource.
Resource storageBlobResource = resourceLoader.getResource("azure-blob://[your-container-name]/[your-blob-name]");

// Get a FileResource.
Resource storageFileResource = resourceLoader.getResource("azure-file://[your-fileshare-name]/[your-file-name]");

Obter recursos pesquisando padrão

Você pode usar uma classe de implementação de ResourcePatternResolver para pesquisar recursos. Use AzureStorageBlobProtocolResolver para pesquisar blob recursos e AzureStorageFileProtocolResolver pesquisar file recursos.

  • Para pesquisa de padrão, o searchPattern deve começar com azure-blob:// ou azure-file://. Por exemplo, significa listar todos os blobs em todos os contêineres e azure-blob://demo-container/** significa listar todos os blobs no demo-container contêiner, azure-blob://**/** incluindo qualquer subpasta.

  • Para pesquisa de local, o deve começar com azure-blob:// ou azure-file:// e o searchLocation caminho do arquivo restante deve existir, caso contrário, uma exceção será lançada.

@Autowired
private AzureStorageBlobProtocolResolver azureStorageBlobProtocolResolver;

@Autowired
private AzureStorageFileProtocolResolver azureStorageFileProtocolResolver;

// Get all text blobs.
Resource[] blobTextResources = azureStorageBlobProtocolResolver.getResources("azure-blob://[container-pattern]/*.txt");

// Get all text files.
Resource[] fileTextResources = azureStorageFileProtocolResolver.getResources("azure-file://[fileshare-pattern]/*.txt");

Manipulação com recursos

Baixar dados de um recurso específico

Você pode baixar um recurso do Blob de Armazenamento do Azure ou do Compartilhamento de Arquivos com o getInputStream() método .Resource

@Value("azure-blob://[your-container-name]/[your-blob-name]")
private Resource storageBlobResource;

@Value("azure-file://[your-fileshare-name]/[your-file-name]")
private Resource storageFileResource;

//...

// Download data as a stream from a blob resource.
InputStream inputblobStream = storageBlobResource.getInputStream();

// Download data as a stream from a file resource.
InputStream inputfileStream = storageFileResource.getInputStream();

Carregar dados para um recurso específico

Você pode carregar em um recurso para o Blob do Azure ou armazenamento de arquivos convertendo o Spring Resource em WritableResource, conforme mostrado no exemplo a seguir:

@Value("azure-blob://[your-container-name]/[your-blob-name]")
private Resource storageBlobResource;

@Value("azure-file://[your-fileshare-name]/[your-file-name]")
private Resource storageFileResource;

String data = "sampledata";

// Upload string data to a blob.
try (OutputStream blobos = ((WritableResource) this.storageBlobResource).getOutputStream()) {
    blobos.write(data.getBytes());
}

// Upload string data to a file.
try (OutputStream fileos = ((WritableResource) this.storageFileResource).getOutputStream()) {
    fileos.write(data.getBytes());
}

Carregamento de várias partes

Arquivos maiores que 4 MiB serão carregados no Armazenamento do Azure em paralelo.

Exemplos

Consulte os repositórios storage-blob-sample e storage-file-sample no GitHub.