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

如何在不使用Java下载到本地文件的情况下获取Azure blob?,java,azure,azure-storage-blobs,azure-blob-storage,Java,Azure,Azure Storage Blobs,Azure Blob Storage,(对于Azure For SDK 10)我可以将文件下载到内存,但我只想将其下载到blob或其他本地对象 BlockBlobURL似乎有一个下载函数,但它只返回一个对象:有没有更直接的方法来获取blob内容 链接描述下载到文件 我正在寻找Java的等价物 您可以使用下面的示例代码直接获取blob内容(而不是本地文件),请尝试 import com.microsoft.azure.storage.CloudStorageAccount; import com.microsoft.azure.st

(对于Azure For SDK 10)我可以将文件下载到内存,但我只想将其下载到blob或其他本地对象

  • BlockBlobURL似乎有一个下载函数,但它只返回一个对象:有没有更直接的方法来获取blob内容

  • 链接描述下载到文件

  • 我正在寻找Java的等价物


您可以使用下面的示例代码直接获取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();
        }
    }
}

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

ByteBuffer byteBuffer = blobURL.download(null, null, false, null)
                               .blockingGet()   // DownloadResponse
                               .body(null)      // Flowable<ByteBuffer>
                               .firstOrError()  
                               .blockingGet();  
ByteBuffer ByteBuffer=blobURL.download(null,null,false,null)
.blockingGet()//下载响应
.body(null)//可流动
.firstOrError()
.blockingGet();

不幸的是,这是Azure的旧版,看起来像。我想知道在稳定版本中是否有办法做到这一点。@svenka根据我的研究,java sdk没有像python那样提供
get\u blob\u to\u text
函数。如果您遵守官方文件中提供的下载到文件功能:。它仍然由
FileOutputStream
实现。您好@jay gong,谢谢您的登录!我最终使用了BlobURL类中提供的较低级别下载API。它很挑剔,因为它还单身。我将在解决方法中添加一个答案:)