从Azure blob存储中读取文件

时间:2012-06-13 11:30:11

标签: c# azure azure-storage azure-storage-blobs

我想从azure存储中读取PDF文件字节,因为我有一个文件路径。

https://hostedPath/pdf/1001_12_Jun_2012_18_39_05_594.pdf

因此可以通过直接传递其路径名来从blob存储中读取内容吗?我也在使用c#。

2 个答案:

答案 0 :(得分:13)

只要blob是 public ,您就可以绝对传递blob网址。例如,您可以将其嵌入到html图像或链接中:

<a href="https://myaccount.blob.core.windows.net/pdf/1001_12_Jun_2012_18_39_05_594.pdf">click here</a>

默认情况下,blob容器是私有。要启用公共读取访问权限,您只需在创建容器时更改容器权限。例如:

var blobStorageClient = storageAccount.CreateCloudBlobClient();
var container = blobStorageClient.GetContainerReference("pdf");
container.CreateIfNotExist();

var permissions = container.GetPermissions();
permissions.PublicAccess = BlobContainerPublicAccessType.Container;
container.SetPermissions(permissions);

答案 1 :(得分:9)

就像David解释的那样,只要容器不是私有的,你就可以通过它的url访问任何blob。

如果容器是私有的,您仍然可以使用Shared Access Signatures(SAS)通过网址访问您的文件。这将允许您授予用户下载文件的权利(通过向他们提供SAS usually appended to the URL),但要及时限制它们。

例如,当你付费下载时,这是完美的,以保护你的文件,但如果有人付钱,允许在有限的时间内下载文件。

现在,在您的问题中,您声明您正在使用C#。如果要在WPF / Windows窗体/控制台应用程序中下载文件,只需使用WebClient下载文件(如果容器是公共的,或者您使用SAS附加URL):

WebClient myWebClient = new WebClient();
myWebClient.DownloadFile("https://myaccount.blob.core.windows.net/pdf/1001_12_Jun_2012_18_39_05_594.pdf", @"D:\Data\myPdfFile.pdf");