从Azure下载BLOB

时间:2013-04-23 15:45:30

标签: azure azure-storage-blobs

从Azure存储下载大型BLOB的最佳方式和最佳做法是什么?

  • 我想使用共享访问签名或共享访问策略来制作BLOB的本地副本

  • 估计的BLOB大小为500 MB到1 GB

  • 互联网连接从250Kb到4Mb不等

2 个答案:

答案 0 :(得分:2)

如果是REST API,请使用HTTP request header

如果是Storage Client Library for .NET,请使用DownloadRangeToStream

答案 1 :(得分:1)

最好的方法取决于你的情况。是否有一个特定的原因阻止您不按照以下方式(Java代码)执行某些操作?我见过这样的例子,但是有兴趣了解为什么你认为它可能不适合你。

    public class SASread 
{
    public static void main(String[] args) throws URISyntaxException, FileNotFoundException, StorageException, IOException 
    {                       
    URI baseuri = new URI("http://greengrass.blob.core.windows.net");
    CloudBlobClient blobclient = new CloudBlobClient(baseuri);
    MyDownloadBlob("container1",
           "sr=c&sv=2012-02-12&sig=ADsFalIpE1XkaneQpWwtpM3AhY%2BAwiUtbbo1ANbIoJA%3D&si=r",
           blobclient);         
    }

    public static void MyDownloadBlob(String containerName, String containerSAS, CloudBlobClient blobClient) throws URISyntaxException, StorageException, FileNotFoundException, IOException
    {   
    String blobName = "image3.jpg";  
    String localFileName = "c:\\myoutputimages\\image3.jpg";  
    URI uri = new URI(blobClient.getEndpoint().toString() + "/" +
                      containerName + "/" + 
                      blobName + 
                      "?" + 
                      containerSAS);   
    CloudBlockBlob sasBlob = new CloudBlockBlob(uri, blobClient);   
    File fileTarget = new File(localFileName); 
    sasBlob.download(new FileOutputStream(fileTarget));
    System.out.println("The blob at:\n"  + uri + "\nwas downloaded from the cloud to local file:\n" + localFileName);   
    }
}