使用服务帐户从Azure Blob存储中批量删除文件

Nitin vavdiya

我正在使用azure blob存储来存储我的项目文件。

我有一个Azure Blob存储的服务帐户(client_id和client_secret)。我CloudBlobClient使用StorageCredentialsToken以下方法创建了一个帐户

StorageCredentialsToken credentialsToken = new StorageCredentialsToken("account name", "access token generated uing client_id and client_secret");
CloudBlobClient blobClient = new CloudBlobClient(new URI("https://accountname.blob.core.windows.net/"), credentialsToken);
CloudBlobContainer cloudBlobContainer = blobClient.getContainerReference("conteiner name");

现在,CloudBlobContainer我可以一次删除一个文件:

CloudBlockBlob blockBlobReference = cloudBlobContainer.getBlockBlobReference(key);
if (blockBlobReference.exists()) {
    blockBlobReference.delete();
}

如何通过一个电话删除多个文件?

我发现这个文件说我们可以使用删除多个文件BlobBatchClient在文档中,我找不到BlobBatchClient使用服务帐户(使用由client_id和client_secret获得的访问令牌)创建的任何方法

我需要删除100多个文件时,可以在异步调用中删除文件吗?是否有其他替代解决方案来批量删除文件?

SDK版本 compile group: 'com.microsoft.azure', name: 'azure-storage', version: '8.6.5'

Nitin vavdiya

根据Jim的评论,我已经BlobServiceAsyncClient使用访问令牌示例方法创建了

public void delete(List<String> files) {
        String endpoint = "https://azureaccount.blob.core.windows.net/";
        AccessToken accessToken = new AccessToken("access token created with client id and client secret", OffsetDateTime.now().plusHours(1)); 
        BlobServiceAsyncClient storageClient = new BlobServiceClientBuilder().credential(request -> Mono.just(accessToken))
                .endpoint(endpoint)
                .buildAsyncClient();
        BlobBatchClient blobBatchClient = new BlobBatchClientBuilder(storageClient).buildClient();
        List<String> blobUrls = new ArrayList<>();
        files.forEach(name -> {
            try {
                String blobUrl = endpoint + "conteinerName/" + URLEncoder.encode(name, "UTF-8");
                blobUrls.add(blobUrl);
            } catch (UnsupportedEncodingException e) {
                LOGGER.debug("Can not encode blob name={}", name);
            }
        });
        blobBatchClient.deleteBlobs(blobUrls, DeleteSnapshotsOptionType.INCLUDE).forEach(response -> {
                    LOGGER.debug("File with name={} deleted, status code={}", response.getRequest().getUrl(), response.getStatusCode());
                }
        );
}

Gradle依赖项:

compile group: 'com.azure', name: 'azure-storage-blob', version: '12.0.0'
compile group: 'com.azure', name: 'azure-storage-blob-batch', version: '12.6.0'

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从 Azure 存储 Blob 中批量删除 'x' 天前的对象

Azure Blob存储中的批量下载

删除 Azure Blob 存储中的“文件夹”

删除Azure Blob存储容器中的文件夹

从Azure存储帐户删除VM Blob

Azure 将文件从 blob 存储移动到同一存储帐户中的文件存储

如何在Azure门户中为高级存储帐户的Azure Blob服务设置CORS?

Azure Blob存储与文件服务

如何使用AzureCLI按日期删除Azure Blob存储中的文件?

上传存储在Azure Blob存储中的文件

删除已删除用户拥有的Azure Blob存储中的只读文件

下载文件后如何从Azure Blob存储中删除文件

为什么使用 Azure Functions 创建应用服务计划和存储帐户?

Azure功能存储帐户在创建时未链接文件服务

使用 C# 从 Azure 存储中删除 Blob

使用 Java 在 Azure Blob 存储中读取文件的文件属性

Azure Blob 存储中的文件 ID [AZURE-BLOB]

如何删除包含租用Blob的Azure存储帐户?

在 Azure 存储中查找软删除 Blob 的永久删除日期

使用服务帐户通过python访问文件

用于 Blob 存储的 Azure 搜索 SDK - 删除文件

批量更改Azure Blob存储的层

使用API在Azure Blob存储中编辑文件

使用其他租户中的帐户为Azure Blob存储实施RBAC?

使用服务主体访问Azure Blob存储

Azure存储帐户拒绝发行方提供托管服务身份

如何使用带有 Azure 存储帐户的 Azure 文件中的 PHP 显示文本内容本身?

如何在Azure函数中使用仅Azure Blob存储帐户-尝试创建Blob快照

如何在 azure-pipelines.yml 中使用 AzureCLI 删除 Azure Blob 存储上的旧文件