从Azure blob存储中下载文件

时间:2018-02-20 16:34:38

标签: c# azure azure-storage-blobs azure-blob-storage

我正在编写一个上传/下载Azure blob存储文件的服务。我上传部分工作正常。我一直在阅读如何下载文件,似乎有几种方法可以实现。

我设法将该文件下载为一个工作正常的流,但我在某处读到可以简单地传递文件的绝对URI并让浏览器下载该文件。

我不知道该怎么做。我是否将URI发送到请求输出流?这样做的任何建议或例子都表示赞赏。我使用C#,但我们有其他客户使用此服务(例如Angular)。

2 个答案:

答案 0 :(得分:3)

您需要创建端点(GET)以获取公共URL,如Azure Docs中所述,并且:

  1. 将其返回给客户端,然后客户端可以在返回的URI
  2. 上调用GET
  3. 返回HTTP REDIRECT响应并重定向到Blob的公共网址
  4. 第三个选项,如果您只需要客户端让此文件传递流,那么创建端点返回流,将Blob读取到内存流,并将内存流返回给客户端。然后,您不需要使用身份验证和匿名访问。

答案 1 :(得分:0)

下载源文件:

public static Stream DownloadFile(string blobName)
{
    CloudBlobContainer container = GetContainer();
    CloudBlob blob = container.GetBlobReference(blobName);
    MemoryStream memoryStream = new MemoryStream();
    blob.DownloadToStream(memoryStream);
    memoryStream.Position = 0;
    return memoryStream;
}

设置并返回容器:

private static CloudBlobContainer GetContainer()
{
    string accountName = "***";
    string accountKey = "***";
    string endpoint = $"https://{accountName}.blob.core.windows.net/";
    string containerName = "***";
    StorageCredentials storageCredentials = new StorageCredentials(accountName, accountKey);
    CloudStorageAccount cloudStorageAccount = new CloudStorageAccount(
    storageCredentials, new Uri(endpoint), null, null, null);
    CloudBlobClient cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();
    CloudBlobContainer container = cloudBlobClient.GetContainerReference(containerName);
    container.CreateIfNotExists();
    return container;
}