Compartilhar via


Manipulação de recursos do Spring Cloud Azure

Este artigo se aplica a:✅ versão 4.19.0 ✅ versão 5.19.0

O projeto Spring fornece uma abstração Spring Resources 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 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:

Starter 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 blocos.
spring-cloud-azure-starter-storage-file-share Compartilhamento de Arquivos de Armazenamento do Azure Oferece compartilhamentos de arquivos de nuvem totalmente gerenciados que você pode acessar de qualquer lugar por meio do protocolo SMB (Bloco de Mensagens do Servidor) 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ê está usando o Blob de Armazenamento do Azure.

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

Ponta

Também fornecemos spring-cloud-azure-starter-storage para dar suporte a todos os recursos do Armazenamento. Se você optar por usá-lo, spring.cloud.azure.storage.enable será a propriedade a ser configurada e o valor padrão será verdadeiro. Em seguida, você pode usar spring.cloud.azure.storage.<storage-service>.enable para desabilitar serviços desnecessários.

Configuração

Nota

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 o 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 Blobs do Azure está habilitado.
spring.cloud.azure.storage.blob.endpoint O URI a ser conectado ao Armazenamento de Blobs do Azure.
spring.cloud.azure.storage.blob.account-key A chave privada a ser conectada ao Armazenamento de Blobs do Azure.
spring.cloud.azure.storage.blob.account-name O nome da conta de Blob do 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 a ser conectado ao Armazenamento de Arquivos do Azure.
spring.cloud.azure.storage.fileshare.account-key A chave privada a ser conectada ao Armazenamento de Arquivos do Azure.
spring.cloud.azure.storage.fileshare.account-name O nome da conta do Compartilhamento de Arquivos do 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

Obter um recurso com @Value

Você pode usar a anotação de @Value("azure-blob://[your-container-name]/[your-blob-name]") para autofiar 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 ligar automaticamente 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 o padrão

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

  • Para 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 a pesquisa de local, o searchLocation deve começar com azure-blob:// ou azure-file:// e o caminho de arquivo restante deve existir, caso contrário, uma exceção será gerada.

@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");

Manipulando com o recurso

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 em 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());
}

Upload de várias partes

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

Amostras

Consulte os de exemplo de de blob de armazenamento e repositórios de de exemplo de arquivo de armazenamento no GitHub.