如何在不使用Java下载到本地文件的情况下获得Azure blob?

时间:2018-11-27 22:19:59

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

(对于Azure for SDK 10)可以将文件下载到内存中,但是我想将其下载到Blob或其他本地对象中。

  • 似乎有一个用于BlockBlobURL的下载功能,但这返回一个Single <>对象:是否有更直接的方法来获取blob内容?

  • This链接描述了下载到文件。

  • 我正在寻找与this等效的Java。

2 个答案:

答案 0 :(得分:1)

BlobURL有一个低级接口,我可以从中提取字节流。这是我的解决方法:

ByteBuffer byteBuffer = blobURL.download(null, null, false, null)
                               .blockingGet()   // DownloadResponse
                               .body(null)      // Flowable<ByteBuffer>
                               .firstOrError()  
                               .blockingGet();  

答案 1 :(得分:0)

您可以使用以下示例代码直接获取blob内容(而不是本地文件),请尝试一下。

import com.microsoft.azure.storage.CloudStorageAccount;
import com.microsoft.azure.storage.blob.CloudBlob;
import com.microsoft.azure.storage.blob.CloudBlobClient;
import com.microsoft.azure.storage.blob.CloudBlobContainer;
import org.apache.commons.io.IOUtils;

import java.io.InputStream;
import java.io.InputStreamReader;

public class GetBlobContent {

    public static final String storageConnectionString =
            "DefaultEndpointsProtocol=http;" +
                    "AccountName=***;" +
                    "AccountKey=***";

    public static void main(String[] args) {
        try {
            CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString);
            CloudBlobClient blobClient = storageAccount.createCloudBlobClient();
            CloudBlobContainer container = blobClient.getContainerReference("jay");
            CloudBlob blob = container.getBlockBlobReference("test.txt");
            InputStream input =  blob.openInputStream();
            InputStreamReader inr = new InputStreamReader(input, "UTF-8");
            String utf8str = IOUtils.toString(inr);
            System.out.println(utf8str);

            System.out.println("download success");

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