有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

例如,在container A内部,将.csvblob从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/的目录结构。它使该路径没有文件,但目录保持未删除状态

关于如何处理这个问题有什么想法吗

非常感谢


共 (1) 个答案

  1. # 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