如何使用Java从azure blob获取特定文件的属性?

时间:2017-06-02 09:52:32

标签: azure azure-storage-blobs azure-blob-storage

我正在使用Java来测试blob中存在的项目。我已经有了一个我希望在blob中出现的文件列表。以下是我的maven依赖。

<dependency>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure-storage</artifactId>
    <version>1.2.0</version>
</dependency>

我没有从blob获取正确的引用/代码示例来获取特定文件的属性。它唯一的方法是列出所有文件并标识您需要的文件。这是非常昂贵的操作。

我指的是以下文档。

https://docs.microsoft.com/en-us/azure/storage/storage-java-how-to-use-blob-storage#download-a-blob

请帮我一个代码示例,展示如何下载特定文件。

2 个答案:

答案 0 :(得分:1)

此代码使您可以从azure blob容器中检索特定文件。

使用以下天青存储版本 maven依赖项

<dependency>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure-storage</artifactId>
    <version>8.6.0</version>
</dependency>

spring-boot 配置文件中创建一个 CloudBlobClient bean。

package com.azure.config;

import java.net.URISyntaxException;
import java.security.InvalidKeyException;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.microsoft.azure.storage.CloudStorageAccount;
import com.microsoft.azure.storage.blob.CloudBlobClient;

@Configuration
public class AzureBlobConfiguration {


    /**
     * Cloud blob client.
     *
     * @return the cloud blob client
     * @throws URISyntaxException the URI syntax exception
     * @throws InvalidKeyException the invalid key exception
     */
    @Bean
    public CloudBlobClient cloudBlobClient()throws URISyntaxException, InvalidKeyException {
        CloudStorageAccount storageAccount = CloudStorageAccount.parse("Blob-Connection-String-Value");
        return storageAccount.createCloudBlobClient();
    }

}

        

使用以下方法 downloadFile 从天蓝色下载特定文件 blob容器并以 byte array 返回文件。

package com.azure.util;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.URISyntaxException;

import org.springframework.beans.factory.annotation.Autowired;

import com.microsoft.azure.storage.StorageException;
import com.microsoft.azure.storage.blob.CloudBlobClient;
import com.microsoft.azure.storage.blob.CloudBlobContainer;
import com.microsoft.azure.storage.blob.CloudBlockBlob;

public class AzureBlob {

    @Autowired
    private CloudBlobClient cloudBlobClient;
    
    private byte[] downloadFile(String containerName, String filename)throws URISyntaxException, StorageException, IOException {
    
        CloudBlobContainer container = cloudBlobClient.getContainerReference(containerName);
        
        CloudBlockBlob cloudBlockBlob = container.getBlockBlobReference(filename);
    
        try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
            cloudBlockBlob.download(outputStream);
            return outputStream.toByteArray();
        }   
    }
}

答案 1 :(得分:0)

好的,我有一个方法,如下所示,使它工作。没有简单的实现。首先必须导航到目录并使用确切的名称检索文件。

using (var reader = ImageReader.Create("../../../PathForTest.tif"))
using (var maskGen = new ImageGenerator(reader.Width, reader.Height, PixelFormat.Format8bppGrayscale, RgbColor.Black))
using (var drawer = new Drawer())
using (var bitmap = new Bitmap())
{
    var graphicsPath = Aurigma.GraphicsMill.AdvancedDrawing.Path.Create(reader.ClippingPaths[0], reader.Width, reader.Height);

    drawer.Draw += (sender, e) =>
    {
        e.Graphics.FillPath(new SolidBrush(new GrayscaleColor(255)), graphicsPath);
    };

    using (var setAlpha = new SetAlpha(maskGen + drawer))
    {
        (reader + setAlpha + bitmap).Run();
        bitmap.Save("../../../result.tif");
    }
}

src:https://softwaretestingboard.com/qna/2197/how-to-download-particular-file-from-azure-blob-using-java