如何使用 Java SDK v12 删除 Blob 文件夹

Posted

技术标签:

【中文标题】如何使用 Java SDK v12 删除 Blob 文件夹【英文标题】:How to delete Blob folders using Java SDK v12 【发布时间】:2021-10-31 22:36:30 【问题描述】:

我正在尝试通过在同一容器内的两个目录之间复制和删除 blob 来模拟移动操作(因为我还没有看到任何移动方法)。

例如,在container A 内部,将.csv blob 从Folder_1 移动到Folder_2,然后从Folder 1 中删除/year/month/day 文件夹结构

container A
|_ Folder_1
|_ _ _/year/month/day/a.csv
|
|_ Folder_2

我目前拥有的代码如下所示:


String blobUrl = "Folder_1 a.csv blob url"
String blobName = "a.csv"
BlobContainerClient outputContainerClient = outputBlobServiceClient.getBlobContainerClient("Container A");
// Folder_1 client
BlobClient tempBlobClient=outputContainerClient.getBlobClient("Folder_1/year/month/day/" + blobName);
// Folder_2 client
BlobClient destBlobClient=outputContainerClient.getBlobClient("Folder_2/year/month/day/" + blobName);
// Copy from Folder_1 to Folder_2                
destBlobClient.beginCopy(blobUrl,null);
// Delete Folder_1      
tempBlobClient.delete();  

问题是tempBlobClient.delete()删除了原来的a.csv而不是Folder_1/year/month/day/的目录结构。它使该路径没有文件,但目录保持未删除。

关于如何处理这个问题的任何想法?

非常感谢

【问题讨论】:

您的存储帐户是 ADLS Gen2 还是常规存储帐户?从描述来看,它看起来像 ADLS Gen2,但需要确认。 感谢高拉夫的回复!这是 ADLS Gen2 对于 ADLS Gen2 存储帐户,请使用 azure-storage-file-datalake SDK 而不是常规的 blob 存储 SDK。您可以在此处找到有关 SDK 的更多信息:docs.microsoft.com/en-us/java/api/overview/azure/…。 HTH。 这可以尝试java:***.com/questions/70719419/… 【参考方案1】:

试试这段代码

var connectionString = "blob-connection-string";
var containerName = "container-name";
var folderPath = "folder1/subfolder/sub-subfolder";

var blobServiceClient = new BlobServiceClient(connectionString);
var blobContainerClient = blobServiceClient.GetBlobContainerClient(containerName);
var blobItems = blobContainerClient.GetBlobsAsync(prefix: folderPath);
await foreach (BlobItem blobItem in blobItems)

     BlobClient blobClient = blobContainerClient.GetBlobClient(blobItem.Name);
     await blobClient.DeleteIfExistsAsync();

更多详情请咨询Thread。

【讨论】:

以上是关于如何使用 Java SDK v12 删除 Blob 文件夹的主要内容,如果未能解决你的问题,请参考以下文章

使用 Azure Java SDK V12 和 ListBlobs() 在 Azure Blobstorage 中列出 Blob 非常慢

如何使用 .NET v12 SDK 在 Azure Blob 存储中上传具有指定 ContentType 的 Blob?

如何使用最新的 Azure SDK .NET API v12 在 Blob 上获取共享访问签名?

上传大文件 Azure Blob .net SDK v12 问题

与 v11 相比,使用 v12 将文件上传到 Azure Blob 存储 SDK 的 ASP.NET Core 使用更高的内存

Azure Blob 存储客户端库 v12 设置代理