繁体   English   中英

列出 azure blob 容器中的文件时发生错误

[英]Error occured while list the files from azure blob container

我正在使用以下代码片段从 Azure Blob 容器中获取文件列表:

    public static String[] listFolder( String containerURI, String sasToken, String dirPrefix) throws StorageException, URISyntaxException{
    ArrayList<String> files = new ArrayList<String>();      
    // Get a reference to a container 
    CloudBlobContainer container = (new CloudBlockBlob(new URI(containerURI + "?" + sasToken))).getContainer();
    CloudBlobDirectory directory = container.getDirectoryReference(dirPrefix);
    if (directory.listBlobs() != null) {
        for (ListBlobItem item : directory.listBlobs()) {
            CloudBlockBlob blob = (CloudBlockBlob)item;
            files.add(blob.getName());
        }
    }
    return files.toArray(new String[files.size()]);
}

但我遇到了一个例外

执行[invoke]时遇到[java.util.NoSuchElementException]:[枚举结果时出错,详情查看原始异常。
com.microsoft.azure.storage.core.LazySegmentedIterator.hasNext(LazySegmentedIterator.Z93F725A07423FE1C889F448B33D21F4Z])

有没有人指出代码有什么问题,或者是否需要任何修改?

以下是我使用的方法,

 private static List<String> listBlobs(CloudBlobContainer container) {
        List<ListBlobItem> blobs = new ArrayList<>();
        Iterable<ListBlobItem> items = container.listBlobs();
        for(ListBlobItem item : items) {
            if (! (item instanceof CloudBlobDirectory)) {
                blobs.add(item);
            }
        }
        return Lists.transform(blobs, new Function<ListBlobItem, String>() {
            @Override
            public String apply(ListBlobItem input) {
                String[] segs = input.getUri().getPath().split("/");
                return "<a href='" + input.getUri().toString() + "'>" + segs[segs.length - 1] + "</a>";
            }
        });
    }

    private static List<String> listBlobs(CloudBlobDirectory directory) throws Exception {
        List<ListBlobItem> blobs = new ArrayList<>();
        Iterable<ListBlobItem> items = directory.listBlobs();
        for(ListBlobItem item : items) {
            if (! (item instanceof CloudBlobDirectory)) {
                blobs.add(item);
            }
        }
        List<String> strings = Lists.transform(blobs, new Function<ListBlobItem, String>() {
            @Override
            public String apply(ListBlobItem input) {
                String[] segs = input.getUri().getPath().split("/");
                return "<a href='" + input.getUri().toString() + "'>" + segs[segs.length - 1] + "</a>";
            }
        });
        for(CloudBlobDirectory dir : listDirectories(directory)) {
            strings.addAll(listBlobs(dir));
        }
        return strings;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM