从Azure blob存储中读取文件

Hop*_*ope 11 c# azure azure-storage azure-storage-blobs

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

https://hostedPath/pdf/1001_12_Jun_2012_18_39_05_594.pdf
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*gon 13

只要blob是公共的,你就可以绝对传递blob url.例如,您可以将其嵌入到html图像或链接中:

<a href="https://myaccount.blob.core.windows.net/pdf/1001_12_Jun_2012_18_39_05_594.pdf">click here</a>
Run Code Online (Sandbox Code Playgroud)

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

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

var permissions = container.GetPermissions();
permissions.PublicAccess = BlobContainerPublicAccessType.Container;
container.SetPermissions(permissions);
Run Code Online (Sandbox Code Playgroud)


San*_*tia 9

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

如果容器是私有的,您仍然可以使用共享访问签名(SAS)通过URL访问您的文件 .这将允许您授予用户下载文件的权利(通过向他们提供SAS,通常附加到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");    
Run Code Online (Sandbox Code Playgroud)