从 Azure Blob 存储读取文件

本文关键字:读取 文件 存储 Blob Azure | 更新日期: 2023-09-27 18:37:13

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

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

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

从 Azure Blob 存储读取文件

只要 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>

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

var blobStorageClient = storageAccount.CreateCloudBlobClient();
var container = blobStorageClient.GetContainerReference("pdf");
container.CreateIfNotExist();
var permissions = container.GetPermissions();
permissions.PublicAccess = BlobContainerPublicAccessType.Container;
container.SetPermissions(permissions);

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

如果容器是专用的,你仍可以使用共享访问签名 (SAS) 使文件可通过 URL 访问。这将允许你授予用户下载文件的权限(通过向他们提供 SAS,通常附加到 URL),但限制它们的时间。

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

现在,在您的问题中,您声明您正在使用 C#。如果要在 WPF/Windows 窗体/控制台应用程序中下载文件,只需使用 Web 客户端下载文件(如果容器是公共的,或者使用 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");