Azure SAS download blob

本文关键字:blob download SAS Azure | 更新日期: 2023-09-27 18:04:37

我正在试着用SAS下载一个blob,现在有点无能。

我列出了视图中所有属于的用户blob。当用户点击blob时,它应该开始下载它。

视图如下:

@foreach (var file in Model)
{
        <a href='@Url.Action("GetSaSForBlob", "Folder", new { blob = file })>
        </a>
}

这是我的两个功能位于"文件夹"控制器。

public void GetSaSForBlob(CloudBlockBlob blob)
{
    var sas = blob.GetSharedAccessSignature(new SharedAccessBlobPolicy()
    {
        SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-5),
        SharedAccessExpiryTime = DateTime.UtcNow.AddHours(3),
        Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.Write,
    });
    DownloadFileTest(string.Format(CultureInfo.InvariantCulture, "{0}{1}", blob.Uri, sas));
    //return string.Format(CultureInfo.InvariantCulture, "{0}{1}", blob.Uri, sas);
}
static void DownloadFileTest(string blobSasUri)
{
    CloudBlockBlob blob = new CloudBlockBlob(new Uri(blobSasUri));
    using (MemoryStream ms = new MemoryStream())
    {
        blob.DownloadToStream(ms);
        byte[] data = new byte[ms.Length];
        ms.Position = 0;
        ms.Read(data, 0, data.Length);
    }
}
  1. 我应该传递什么从我的视图到GetSasForBlob?目前CloudBlockBlob blob为空

  2. 我在功能DownloadFileTest中缺少任何代码吗?

  3. 我应该直接从gettsasforblob调用DownloadFileTest吗?

  4. 如何保护这两个函数,使人们无法在视图外访问它们?它们现在都是静态函数。我猜那不安全吧?

Azure SAS download blob

1、您的file在您的视图中的值是多少。我认为MVC不能基于你提供的文件创建CloudBlockBlob对象。所以这可能是你得到CloudBlockBlob中的null的原因。

在您的DownloadFileTest中,您只需将blob的二进制文件下载到服务器的内存流中,这就是全部。如果需要让用户将其下载到本地磁盘,则需要将二进制文件放入Response.Stream中。你可以直接使用blob.DownloadToStram(Response.Stream)。 那由你决定。如果你愿意,你可以用同样的方法合并它们。

4,如果你想让用户通过你的web前端(网站或web服务)下载blob,就像你现在做的那样,你需要将你的blob容器设置为private,并通过使用类似[Authorize]的属性来保护你的网站或web服务。基本上在你的情况下,你根本不需要使用SAS,因为所有的下载请求都是通过你的web前端执行的。