Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用java代码从azure服务器下载图像_Java_Azure - Fatal编程技术网

无法使用java代码从azure服务器下载图像

无法使用java代码从azure服务器下载图像,java,azure,Java,Azure,我已经通过java代码成功地在Azure服务器上上传了图像,但当我尝试下载图像时遇到了一个异常 要下载的代码: try { // Retrieve storage account from connection-string. CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString); // Create the blob client. CloudB

我已经通过java代码成功地在Azure服务器上上传了图像,但当我尝试下载图像时遇到了一个异常

要下载的代码:

try
{
    // Retrieve storage account from connection-string.
   CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString);

   // Create the blob client.
   CloudBlobClient blobClient = storageAccount.createCloudBlobClient();

   // Retrieve reference to a previously created container.
   CloudBlobContainer container = blobClient.getContainerReference("mycontainer");

   // Loop through each blob item in the container.
   for (ListBlobItem blobItem : container.listBlobs()) {
       // If the item is a blob, not a virtual directory.
       if (blobItem instanceof CloudBlob) {
           // Download the item and save it to a file with the same name.
            CloudBlob blob = (CloudBlob) blobItem;
            blob.download(new FileOutputStream("C:\\mydownloads\\" + blob.getName()));
        }
    }
}
在例外情况下

java.util.NoSuchElementException: An error occurred while enumerating the result, check the original exception for details.
    at com.microsoft.windowsazure.storage.core.LazySegmentedIterator.hasNext(LazySegmentedIterator.java:113)
    at com.test.BlobBasics.main(BlobBasics.java:106)
Caused by: com.microsoft.windowsazure.storage.StorageException: The server encountered an unknown failure: OK
    at com.microsoft.windowsazure.storage.StorageException.translateException(StorageException.java:187)
    at com.microsoft.windowsazure.storage.core.ExecutionEngine.executeWithRetry(ExecutionEngine.java:251)
    at 
    ... 1 more
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1]
Message: Content is not allowed in prolog.
    at com.sun.xml.stream.XMLReaderImpl.next(XMLReaderImpl.java:563)
    at com.microsoft.windowsazure.storage.blob.ListBlobsResponse.parseResponse(ListBlobsResponse.java:118)
    at com.microsoft.windowsazure.storage.blob.CloudBlobContainer$6.postProcessResponse(CloudBlobContainer.java:1227)
    at com.microsoft.windowsazure.storage.blob.CloudBlobContainer$6.postProcessResponse(CloudBlobContainer.java:1190)
    at com.microsoft.windowsazure.storage.core.ExecutionEngine.executeWithRetry(ExecutionEngine.java:185)
    ... 2 more

他们使用下面的代码,这将对您有所帮助

public void downloadAttachment() {
    try {

        final String storageConnectionString = "DefaultEndpointsProtocol=http;" + "AccountName=your account name;" + "AccountKey=your account key";

        // Retrieve storage account from connection-string.
        CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString);
        // Create the blob client.
        CloudBlobClient blobClient = storageAccount.createCloudBlobClient();
        // Get a reference to a container.
        // The container name must be lower case
        container = blobClient.getContainerReference("container name");
        if (container.listBlobs() != null) {
            Log.d("in if ", "list conatin value");
            new downloadingAttachment().execute();
        } else {
            Log.d("in else ", "list does not any contain value ");
        }

    } catch (Exception e) {
        // Output the stack trace.
        e.printStackTrace();
    }
}

 public class downloadingAttachment extends AsyncTask<Void, Void, Void> {

    @Override
    protected Void doInBackground(Void... params) {

        Log.d("in if ", "container.listBlobs();" + container.listBlobs());
        Iterable<ListBlobItem> valuesofConatainer = container.listBlobs();
        Log.d("in if ", "valuesofConatainer=" + valuesofConatainer);

        for (ListBlobItem blobItem : container.listBlobs()) {
            // If the item is a blob, not a virtual directory.

            if (blobItem instanceof CloudBlob) {
                // Download the item and save it to a file with the same name.
                CloudBlob blob = (CloudBlob) blobItem;
                try {
                    blob.download(new FileOutputStream("your storage location" + blob.getName() + ".jpeg"));
                    Log.d(" blob.getName()=", " " + blob.getName());
                    break;

                } catch (URISyntaxException e) {
                    e.printStackTrace();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (StorageException e) {
                    e.printStackTrace();
                }
            }
        }


        return null;
    }
}
public void下载附件(){
试一试{
最终字符串storageConnectionString=“DefaultEndpointsProtocol=http;“+”AccountName=您的帐户名;“+”AccountKey=您的帐户密钥”;
//从连接字符串中检索存储帐户。
CloudStorageAccount-storageAccount=CloudStorageAccount.parse(storageConnectionString);
//创建blob客户端。
CloudBlobClient blobClient=storageAccount.createCloudBlobClient();
//获取对容器的引用。
//容器名称必须为小写
container=blobClient.getContainerReference(“容器名称”);
if(container.listBlobs()!=null){
Log.d(“在if中”,“列出conatin值”);
新的下载附件().execute();
}否则{
Log.d(“在else中”,“列表不包含任何值”);
}
}捕获(例外e){
//输出堆栈跟踪。
e、 printStackTrace();
}
}
公共类下载附件扩展异步任务{
@凌驾
受保护的Void doInBackground(Void…参数){
Log.d(“in-if”,“container.listBlobs();”+container.listBlobs());
Iterable valuesofconatiner=container.listBlobs();
Log.d(“在if中”,“valuesofconainer=“+valuesofconainer”);
对于(ListBlobItem blobItem:container.listBlobs()){
//如果项目是blob,而不是虚拟目录。
if(CloudBlob的blobItem实例){
//下载项目并将其保存到同名文件中。
CloudBlob blob=(CloudBlob)blobItem;
试一试{
下载(新的FileOutputStream(“您的存储位置”+blob.getName()+”.jpeg”);
Log.d(“blob.getName()=”,“”+blob.getName());
打破
}捕获(URISyntaxException e){
e、 printStackTrace();
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(存储异常){
e、 printStackTrace();
}
}
}
返回null;
}
}

您使用的是哪个版本的Java SDK?RESTAPI中的XML结构发生了一些变化。希望确保您没有使用较旧版本的SDK获取Blob列表。我正在使用jdk 1.7版本并下载最新版本的jar:microsoft-windowsazure-storage-SDK-0.7.0(之前我使用的是0.5.0版本),现在我可以按预期通过java代码从Azure服务器下载。非常感谢icedtrees和所有有价值的解决方案。。。。。