【问题标题】:download virtual directory from blob storage从 Blob 存储下载虚拟目录
【发布时间】:2018-06-24 18:40:02
【问题描述】:

我想从 Azure Blob 存储下载虚拟目录。目录存在于容器中。我尝试使用ColudBlobDirectory API。但它没有任何下载虚拟目录的方法。

for (ListBlobItem blobItem : container.listBlobs()) { 
    // If the item is a blob, a virtual directory. 
    if (blobItem instanceof CloudBlobDirectory) { 
        CloudBlobDirectory blob1 = (CloudBlobDirectory) blobItem; 
        System.out.println("\n Blob prefix:" + blob1.getPrefix()); 
    }
}

【问题讨论】:

  • 会推荐您尝试过的代码。
  • for (ListBlobItem blobItem : container.listBlobs()) { // 如果 item 是 blob,则为虚拟目录。 if (blobItem instanceof CloudBlobDirectory) { CloudBlobDirectory blob1 = (CloudBlobDirectory) blobItem; System.out.println("\n Blob 前缀:"+blob1.getPrefix()); } @Yogesh_D
  • 尝试从目录中逐个下载项目。

标签: java azure azure-blob-storage


【解决方案1】:

正如@talex所说,您可以像这样从目录中一一下载blob文件:

public static String destFilePath = "/path/to/directory/";

public static void main(String[] args)
        throws InvalidKeyException, URISyntaxException, StorageException, IOException {

    CloudStorageAccount account = CloudStorageAccount.parse(storageConnectionString);
    CloudBlobClient serviceClient = account.createCloudBlobClient();
    CloudBlobContainer container = serviceClient.getContainerReference("mycontainer");

    for (ListBlobItem blobItem : container.listBlobs()) {

        // If the item is a blob, a virtual directory.
        if (blobItem instanceof CloudBlobDirectory) {

            CloudBlobDirectory blobDir = (CloudBlobDirectory) blobItem;
            downloadDirectory(blobDir);
        }
    }
}

public static void downloadDirectory(CloudBlobDirectory blobDir)
        throws IOException, StorageException, URISyntaxException {

    Files.createDirectories(Paths.get(destFilePath + blobDir.getPrefix()));

    for (ListBlobItem blobInDir : blobDir.listBlobs()) {

        if (blobInDir instanceof CloudBlockBlob) {
            CloudBlockBlob blob = (CloudBlockBlob) blobInDir;
            blob.downloadToFile(destFilePath + blob.getName());
        } else {
            downloadDirectory((CloudBlobDirectory) blobInDir);
        }
    }

}

【讨论】:

  • 如果文件存在于子文件夹中,那么如何下载该文件@Aaron Chen
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-02
  • 2013-10-28
  • 1970-01-01
  • 1970-01-01
  • 2016-05-23
  • 2017-07-19
  • 2021-07-25
相关资源
最近更新 更多