11

我有一个作为 Azure blob 发布的软件安装程序,我需要计算它被下载了多少次。

问题是它可以被外部引用(从许多下载站点),因此我无法通过网站控制它。

那么... Windows Azure 是否有一种机制来检测 blob 下载或注册它们的计数?谢谢!

4

2 回答 2

10

您是否考虑过将您的容器设为私有?这将阻止人们直接下载 blob。通过这样做,您可以完全控制谁可以下载文件以及他们可以下载多长时间。

假设只有注册用户可以下载文件并且您使用的是 ASP.NET MVC。然后你可以有一个类似于这个的动作:

    [Authorize]
    public ActionResult Download(string blobName)
    {
        CountDownload(blobName);

        var blobClient = storageAccount.CreateCloudBlobClient();
        var container = blobClient.GetContainerReference(containerName);
        var blob = container.GetBlobReference(blobname);

        var sas = blob.GetSharedAccessSignature
        (
          new SharedAccessPolicy
          {
              Permissions = SharedAccessPermissions.Read,
              SharedAccessStartTime = DateTime.Now.ToUniversalTime(),
              SharedAccessExpiryTime = DateTime.Now.ToUniversalTime().AddHours(1)
          }
        );

        return Content(blob.Uri.AbsoluteUri + sas);
    }

它的作用如下:

  • Authorize 属性确保只有登录的用户才能访问此操作。
  • 您增加该 blob 的下载次数
  • 您可以根据名称获得 blob 的引用
  • 您生成的签名允许下载 blob 1 小时
  • 您返回带有签名的 blob 的 url(您也可以将其重定向到 blob url)

通过您的应用程序分发带有签名的 URL,您可以完全控制,您甚至可以查看其他场景,例如验证码、付费下载、应用程序中的高级权限......

于 2012-08-03T06:08:02.170 回答
8

您可以使用 存储分析来确定您的 blob 有多少下载:

Blob 使用情况也可在新管理门户中以图表形式提供:

在此处输入图像描述

于 2012-08-03T08:20:22.223 回答