如何使用 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 使用更高的内存