【问题标题】:How to detect or count Azure blob downloads?如何检测或计算 Azure blob 下载量?
【发布时间】:2012-08-01 00:31:01
【问题描述】:

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

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

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

【问题讨论】:

  • 如果您有公开可用的 BLOB(即,未在服务后面抽象),那么我认为您将获得的最接近的东西是存储指标日志。查看blogs.msdn.com/b/windowsazurestorage/archive/2011/08/03/…。不过,我不确定这是否会为您提供所需的内容。
  • 当然,如果它支持服务,那么您可以轻松计算它。顺便说一句,对于软件安装程序,您可能还希望使用 CDN 来改善体验,但您的工作会更加困难(尽管您仍然可以使用服务和 CDN)。听起来这现在很流行,现阶段服务不可行?
  • @MikeWo - 您应该将您的评论移至答案。

标签: azure blob


【解决方案1】:

您是否考虑过将您的容器设为私有?这将阻止人们直接下载 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,您可以完全控制,您甚至可以查看其他场景,例如验证码、付费下载、应用程序中的高级权限......

【讨论】:

  • 您可以使用DateTime.UtcNow,也无需指定开始时间(注意时钟偏差)。
  • 这实际上并不计算 blob 的下载次数,只计算 blob 提供下载的次数。用户可能会拒绝浏览器中的下载弹出窗口。
【解决方案2】:

您可以使用storage analytics 来计算您的 blob 的下载量:

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

【讨论】:

  • 存储分析(每个 blob id 的总请求数)是否可以通过 API 以某种方式获得?我有兴趣查询 blob 的下载计数,仅用于报告目的。
猜你喜欢
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
  • 1970-01-01
  • 2022-11-02
  • 2013-04-16
  • 1970-01-01
相关资源
最近更新 更多