11

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

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

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

4

2 回答 2

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);
于 2012-06-13T12:42:13.387 回答
9

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

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

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

现在,在您的问题中,您声明您正在使用 C#。如果您想在 WPF/Windows Forms/Console 应用程序中下载该文件,您可以简单地使用 WebClient 下载该文件(如果容器是公共的或者您将 URL 附加到 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");    
于 2012-06-13T13:24:12.557 回答