简体   繁体   English

Azure SDK API和JAVA用法-列出存储帐户中的所有容器和BLOBS的问题

[英]Azure SDK API and JAVA usage - Issue Listing all Containers and BLOBS inside a storage account

Issues while using client.listContainers() and container.listBlobs() functions and getting below JAVA exception. 使用client.listContainers()container.listBlobs()函数并低于JAVA异常时出现的问题。 Tried to access them individually with reference methods and it works fine. 尝试使用参考方法分别访问它们,并且效果很好。 Not sure why this is happening as there are no access restrictions ie public access and getting the client reference without any issues of Connection String. 不知道为什么会这样,因为没有访问限制,即公共访问和获取客户端引用而没有任何连接字符串问题。


Exception: 例外:

java.util.NoSuchElementException: An error occurred while enumerating the result, check the original exception for details.
java.util.NoSuchElementException: An error occurred while enumerating the result, check the original exception for details.
at com.microsoft.azure.storage.core.LazySegmentedIterator.hasNext(LazySegmentedIterator.java:113)
at com.company.test.core.handler.AzureHeirarchyGenerator.getAzureFileList(AzureHeirarchyGenerator.java:69)
at com.company.test.core.handler.AzureHeirarchyGenerator.main(AzureHeirarchyGenerator.java:18)
Caused by: com.microsoft.azure.storage.StorageException: An unknown failure occurred : Connection refused: connect
at com.microsoft.azure.storage.StorageException.translateException(StorageException.java:66)
at com.microsoft.azure.storage.core.ExecutionEngine.executeWithRetry(ExecutionEngine.java:209)
at com.microsoft.azure.storage.core.LazySegmentedIterator.hasNext(LazySegmentedIterator.java:109)
... 2 more
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:673)
at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:264)
at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:367)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1156)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1050)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1564)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:347)
at com.microsoft.azure.storage.core.ExecutionEngine.executeWithRetry(ExecutionEngine.java:115)
... 3 more

Code Snippet JAVA: Java代码段:

    CloudStorageAccount account = CloudStorageAccount.parse(azureConnectionString);
    CloudBlobClient client = account.createCloudBlobClient();
    // List all containers of a storage account
    Iterable<CloudBlobContainer> containers = client.listContainers();
    for (CloudBlobContainer cloudBlobContainer : containers) {
        Iterable<ListBlobItem> blobs = cloudBlobContainer.lisBlobs();
        System.out.println("Code to fetch blobs inside container");
    }

I have tested your code and it worked fine in my environment as below: 我已经测试了您的代码,并且在以下环境中可以正常工作:

在此处输入图片说明

Here is my full code for your reference: 这是我的完整代码供您参考:

import java.net.URISyntaxException;
import java.security.InvalidKeyException;
import com.microsoft.azure.storage.CloudStorageAccount;
import com.microsoft.azure.storage.blob.CloudBlobClient;
import com.microsoft.azure.storage.blob.CloudBlobContainer;
import com.microsoft.azure.storage.blob.ListBlobItem;

public class Main {

    public static void main(String[] args) {
    // TODO Auto-generated method stub

    CloudStorageAccount account;
    try {
        account = CloudStorageAccount.parse("DefaultEndpointsProtocol=https;AccountName=leeliublob;AccountKey=O7xxxxxxxxxxxxxxx/x/e9l9FhLqayXcbz1R+E0mIcJ5Wjkly1DsQPYY5dF2JrAVHtBozbJo29ZrrGJA==;EndpointSuffix=core.windows.net");
        CloudBlobClient client = account.createCloudBlobClient();

        Iterable<CloudBlobContainer> containers = client.listContainers();
        for (CloudBlobContainer cloudBlobContainer : containers) {
            Iterable<ListBlobItem> blobs = cloudBlobContainer.listBlobs();
            System.out.println("BlobContainer : "+ cloudBlobContainer.getName());
            System.out.println("   blobs inside container '"+cloudBlobContainer.getName()+"' are: ");
            int x=1;
            for (ListBlobItem blobItem : cloudBlobContainer.listBlobs()) {
                String blobName = blobItem.getUri().toString();
                System.out.println("         Number "+x+": url="+ blobItem.getUri().toString());
            x++;
            }

        }
    } catch (InvalidKeyException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (URISyntaxException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }



    }

}

I guess there may be two reasons which cause your errors: 我想可能有两个原因导致您的错误:

  1. Please ensure that the connection string is correct. 请确保连接字符串正确。

  2. Please ensure to use the latest Java SDK and the SDK of Java which i used from : azure-storage-java 请确保使用最新的Java SDK和我使用过的Java SDK: azure-storage-java

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

相关问题 Azure存储Java API:检查存储帐户是否支持安全传输或不使用Java SDK - Azure Storage Java API: Check if storage account support secure transfer or not using java SDK 用于块Blob的Azure存储服务REST API:内容长度问题 - Azure Storage service REST API for block Blobs : Content Length Issue Listing blobs in Azure Blobstorage using Azure Java SDK V12 and ListBlobs() is extremely slow - Listing blobs in Azure Blobstorage using Azure Java SDK V12 and ListBlobs() is extremely slow Azure存储帐户Blob容器大小 - Azure Storage Account Blobs container size 通过Java SDK列出我的Azure帐户上的虚拟机 - Listing Virtual Machines on my Azure account through the Java SDK 如何使用 Java 列出 Azure 存储帐户中的空容器? - How to list empty containers in Azure storage account using Java? 从应用注册中列出 azure 存储帐户容器时,受众验证失败 - Audience validation failed while listing azure storage account containers from app registrations 如何使用 java 在 Azure Blob 存储中的容器之间移动(或复制)blob - How to move (or copy) blobs between containers in Azure Blob Storage using java Java Azure存储客户端-删除Blob - Java Azure Storage Client - deleting blobs 通过代理服务器连接到Azure存储帐户的Microsoft Azure Java存储SDK - Connecting to Azure storage account thru proxy server Microsoft Azure Storage SDK for Java
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM