Partilhar via


Tratamento de recursos do Spring Cloud Azure

Este artigo aplica-se a:✅ Versão 4.19.0 ✅ Versão 5.19.0

O projeto Spring fornece uma Spring Resources abstração para acessar uma série de 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 que você interaja com o Blob de armazenamento do Azure e o Compartilhamento de Arquivos usando o modelo de programação Spring. O Spring Cloud Azure fornece spring-cloud-azure-starter-storage-blob e spring-cloud-azure-starter-storage-file-share para configurar automaticamente o Blob de Armazenamento do Azure e o Compartilhamento de Arquivos de Armazenamento do Azure.

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

Arranque Serviço Descrição
spring-cloud-azure-starter-storage-blob Blob de Armazenamento do Azure Permite que dados não estruturados sejam armazenados e acessados em grande escala em blobs de bloco.
spring-cloud-azure-starter-storage-file-share Compartilhamento de arquivos de armazenamento do Azure Oferece compartilhamentos de arquivos na nuvem totalmente gerenciados que você pode acessar 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 dependência spring-cloud-azure-starter-storage-blob só é necessária quando você estiver usando o Blob de Armazenamento do Azure.

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

Dica

Também fornecemos spring-cloud-azure-starter-storage para suportar 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 desativar 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, consulte Autorizar acesso com o Microsoft Entra ID.

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

Propriedade Inadimplência Descrição
spring.cloud.azure.storage.blob.enabled verdadeiro Um valor que indica se um serviço de Armazenamento de Blob do Azure está habilitado.
spring.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.account-name 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 Inadimplência Descrição
spring.cloud.azure.storage.fileshare.enabled verdadeiro Um valor que indica se o serviço de Armazenamento de Arquivos do Azure está habilitado.
spring.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.account-name O nome da conta do Compartilhamento de Arquivos de Armazenamento do Azure.

Utilização básica

Adicione as seguintes propriedades ao seu 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 @Value("azure-blob://[your-container-name]/[your-blob-name]") para autoconectar um recurso de 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 @Value("azure-file://[your-fileshare-name]/[your-file-name]") para autowire um recurso de 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 recursos blob e AzureStorageFileProtocolResolver pesquisar recursos file.

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

  • Para pesquisa de localização, o searchLocation deve começar com azure-blob:// ou azure-file:// e o 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 método getInputStream() de 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 para um recurso no Blob do Azure ou no armazenamento de arquivos transmitindo o Spring Resource para 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

Os ficheiros com mais de 4 MiB serão carregados para o Armazenamento do Azure em paralelo.

Amostras

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