【问题标题】:How can I get an Azure blob without downloading to a local file using Java?如何在不使用 Java 下载到本地文件的情况下获取 Azure Blob?
【发布时间】:2019-04-29 18:00:08
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java azure azure-blob-storage


    【解决方案1】:

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

    【讨论】:

    • 不幸的是,这似乎是 Azure 的旧版本。我想知道稳定版本是否有办法做到这一点。
    • @svenka 根据我的研究,到目前为止,java sdk 没有像 python 那样提供get_blob_to_text 功能。如果您观察到官方文档中提供的下载到文件功能:github.com/twright-msft/azure-content/blob/master/articles/…。它仍然由FileOutputStream 实现。
    • 嗨@jay-gong,感谢您的入住!我最终使用了 BlobURL 类中可用的较低级别的下载 API。它很挑剔,因为它返回 Single。我将用我的解决方法添加一个答案:)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-07-06
      • 2021-04-21
      • 1970-01-01
      • 2020-10-14
      • 2014-05-18
      • 1970-01-01
      • 2014-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多