2012-06-13 233 views
11

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

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

因此有可能通过直接传递其路径名来读取blob存储中的内容?另外我正在使用C#。

回答

13

只要blob是public,您绝对可以传递blob url。例如,你可以在一个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); 
+0

而请参阅@ Sandrino关于共享访问签名的回答,您可能会发现它对于客户特定内容与图像,帮助文件,小册子等公共内容非常有用。 –

8

就像大卫解释说,只要容器不是私人的,就可以通过它的URL访问任何blob。

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

这是完美的,当你有支付下载例如,保护你的文件,但允许他们在有限的时间下载,如果有人为此付费。

现在,在您的问题中,您声明您使用的是C#。如果你想下载一个WPF/Windows窗体/控制台应用程序的文件,你可以简单地使用Web客户端下载的文件(如果容器是公共的还是你追加与SAS的网址):

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");  
+0

SAS的msdn链接无法工作 – Nikitesh