【发布时间】:2012-06-16 08:32:48
【问题描述】:
我想从 azure 存储中读取 PDF 文件字节,因为我有一个文件路径。
https://hostedPath/pdf/1001_12_Jun_2012_18_39_05_594.pdf
所以可以通过直接传递路径名称来从 blob 存储中读取内容吗?我也在使用 c#。
【问题讨论】:
标签: c# azure azure-storage azure-blob-storage
我想从 azure 存储中读取 PDF 文件字节,因为我有一个文件路径。
https://hostedPath/pdf/1001_12_Jun_2012_18_39_05_594.pdf
所以可以通过直接传递路径名称来从 blob 存储中读取内容吗?我也在使用 c#。
【问题讨论】:
标签: c# azure azure-storage azure-blob-storage
只要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);
【讨论】:
就像 David 解释的那样,只要容器不是私有的,您就可以通过其 url 访问任何 blob。
如果容器是私有的,您仍然可以使用 Shared Access Signatures (SAS) 通过 url 访问您的文件。这将允许您授予用户下载文件的权利(通过向他们提供 SAS,usually appended to the 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");
【讨论】: